javascript - JS for item in items -> promise 链得到错误的值

标签 javascript ecmascript-6 teamspeak

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

例如,我有时会得到不包含两个相同的人的客户列表。然后,对于每个人,我想添加另一个 promise ,其中我传递每个人的名字。问题是有时我得到两个名为“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 循环正在引用键而不是值,并且由于 Promise 链,clients[client] 在稍后的时间点进行评估。

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

关于javascript - JS for item in items -> promise 链得到错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60508992/

相关文章:

javascript - 在对象数组中查找包含对象数组中的子对象的值

javascript - 如何使用 require 导入模块的某些部分?

php - 用于 PHP 的 TeamSpeak API 更改的变量

javascript - 是否可以在运行依赖项之前在 gulp 任务中分配一个变量?

javascript - 我们可以在 JS 中监听事件之前发生的事件吗?

javascript - 如何使用 Lodash 将对象替换或附加到另一个对象

java - Java中使用JNI加载Teamspeak动态链接库

java - 使用 java 读取 TeamSpeak 3 消息

javascript - LeafletJS : How to use L. leafletjs 中的 Routing.itinerary 和路线上的悬停事件?

php - 如何在 PHP 中插入 onsubmit