gpt4 book ai didi

javascript - Node.js 在循环和处理对象数组时异步丢失上下文

转载 作者:太空宇宙 更新时间:2023-11-04 02:36:03 25 4
gpt4 key购买 nike

使用 JavaScript( Node ,但浏览器中存在同样的问题),我有一个用户列表。每个用户对象都必须用于登录交换以检索其订单,然后如果找到任何订单,则处理它们。一旦登录到交易所,就会建立一个循环,以便可以定期从所有交易所检索所有用户的订单,直到进程被终止。

例如:

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 分钟循环一次(基于 throttle )。

我一直在使用 caolan 的异步库来执行此操作 - 特别是 async.each、async.forever 和 async.parallel 函数;但我正在努力在它们之间传递范围。

问题是用户将在第一次通过时分配一个交换(例如“au”)并且运行良好。在任何后续循环中,该函数都会选择与应有的用户不同的用户。

我创建了一个 fiddle 来演示这个问题:http://jsfiddle.net/RnMb9/7/

第一次通过后(用户 1:处理 au 交换(每 20 秒)。)“au”再也不会出现。

关于如何纠正此上下文问题有什么想法吗?我一直在尽我所能地尝试在所有领域绑定(bind)用户,但无济于事。

最佳答案

….each(users, function(user) {
….each(exchanges, function(exchange) {

user.exchange = exchange;

那是你的问题。在每个(内部)循环中,您都会覆盖同一 user 对象的 .exchange 值。要解决这个问题,要么 clone您的对象,或者将交换作为处理器的单独参数,而不是将其作为用户对象的一部分传递。

关于javascript - Node.js 在循环和处理对象数组时异步丢失上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22252271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com