0

我无法掌握如何获得正确的价值。解决我的问题。

因此,例如,我有时会得到不包含两个相同人的客户列表。然后对于他们每个人,我想添加另一个承诺,我传递每个人的名字。问题是有时我得到两个称为“Foo”和“Foo”的,而不是“Foo”和“Bar”。

(...)    
for (let client in clients) {

   chain = chain.then(resolve => mainEvent(clients[client])) // since this is built and executed after, I sometimes get repeating client names. It's really unpredictable and weird.

   ev.client.chat(clients[client].name()) // correct output but this is in sync with the loop
}
(...)
4

1 回答 1

1

如果clients您的程序执行时值发生变化,那可能是您的问题。由于for in循环正在引用键而不是值,并且clients[client]由于承诺链而在稍后的时间点进行评估。

您有两个选择:要么切换到for of循环以获取对象的值而不是键,要么const value = clients[client]在循环主体内添加 a 并value在闭包中使用。这两种方法都将在循环执行时检索值,这正是您想要的。

于 2020-03-03T15:04:46.687 回答