项目中项目的 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
在你的闭包中。这两种方法都将在循环执行时检索值,这正是您想要的。
我不知道如何获得正确的值。吹我的问题。
例如,有时我得到的客户列表中从来没有包含两个相同的人。然后我想为他们每个人添加另一个承诺,我传递每个人的名字。问题是有时我得到两个叫做 "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
在你的闭包中。这两种方法都将在循环执行时检索值,这正是您想要的。