使用JavaScript(节点,但浏览器中存在相同问题),我有一个用户列表。必须使用每个User对象登录到交易所以检索其Orders,然后(如果找到)处理它们。登录到交易所后,将建立一个循环,以便可以定期从所有用户的所有交易所检索订单,直到终止该过程。
例如。:
var users = [ { id:1, throttle: 20 }, { id: 2, throttle: 45 } ];
var exchanges = [ 'au', 'uk' ];
这将意味着使用以下设置运行4个循环::
processor 1 - id: 1, exchange 'au', throttle: 20
processor 2 - id: 1, exchange 'uk', throttle: 20
processor 3 - id: 2, exchange 'au', throttle: 45
processor 4 - id: 2, exchange 'uk', throttle: 45
对于每种情况,我每x分钟循环一次(基于油门)。
我一直在使用caolan的async库来执行此操作-具体来说async.each,async.forever和async.parallel函数;但是他们正在努力在两者之间传递范围。
问题在于,用户将在首次通过时分配一个交易所(例如“ au”)并且运行良好。在随后的任何循环中,该功能都会选择与其应使用的用户不同的用户。
我创建了一个小提琴来演示该问题:http://jsfiddle.net/RnMb9/7/
第一次通过后(用户1:处理au交换(每20秒)。)“ au”再也不会出现。
关于如何纠正此上下文问题有任何想法吗?我一直在尽我所能地绑定用户,但无济于事。
最佳答案
….each(users, function(user) {
….each(exchanges, function(exchange) {
…
user.exchange = exchange;
那是你的问题。在每个(内部)循环回合中,您都将覆盖同一
.exchange
对象的user
值。要解决此问题,请clone您的对象,或使交换成为处理器的单独参数,而不是将其作为用户对象的一部分传递。