项目中项目的 JS -> 承诺链获得错误的值

JS for item in items -> promise chain gets wrong values

我不知道如何获得正确的值。吹我的问题。

例如,有时我得到的客户列表中从来没有包含两个相同的人。然后我想为他们每个人添加另一个承诺,我传递每个人的名字。问题是有时我得到两个叫做 "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
}
(...)

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

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