使用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您的对象,或使交换成为处理器的单独参数,而不是将其作为用户对象的一部分传递。

10-07 19:48
查看更多