Javascript 项目中项目的JS->;承诺链得到了错误的值

Javascript 项目中项目的JS->;承诺链得到了错误的值,javascript,ecmascript-6,teamspeak,Javascript,Ecmascript 6,Teamspeak,我不知道如何得到正确的值。解决我的问题 例如,我有时会得到一个clientlist,它不包含两个相同的人。然后,对于每一个,我想添加另一个承诺,在这里我传递每个人的名字。问题是,有时我会得到两个“Foo”和“Foo”,而不是“Foo”和“Bar” 如果客户端的值在程序执行时发生更改,这可能是您的问题。因为for in循环引用的是键,而不是值,并且客户机[client]由于承诺链的原因在稍后的时间点进行评估 您有两个选项:或者切换到of循环的,以获取对象的值而不是键,或者在循环体中添加const

我不知道如何得到正确的值。解决我的问题

例如,我有时会得到一个clientlist,它不包含两个相同的人。然后,对于每一个,我想添加另一个承诺,在这里我传递每个人的名字。问题是,有时我会得到两个“Foo”和“Foo”,而不是“Foo”和“Bar”


如果
客户端的值在程序执行时发生更改,这可能是您的问题。因为
for in
循环引用的是键,而不是值,并且
客户机[client]
由于承诺链的原因在稍后的时间点进行评估


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

让客户机进入客户机
您的意思是
让客户机中的客户机
@Keith dosn对于示例来说并不重要。我没有得到正确的客户名称。因为for循环是不同步的,它们都在同一时间执行并构建承诺链,所以我经常会得到错误的名称。我不知道如何确保我得到了正确的。客户机是数组还是对象?啊,对了,在这种情况下,你可以使用
reduce
创建一个承诺链->,但就我个人而言,如果可能的话,我会选择
async/wait
。@Gabrielepetroli如果我是对的,它就是一个对象。为什么这是相关的?(我会查一下,但我现在不在桌面上)我会看看是否能弄明白你在第二部分解释什么。首先,我来看看of的
是否有效。我明天就要考试了。从我的考试来看,似乎已经修好了。不过,我必须看看这种情况是否持续。所以我会在一周左右接受这个。非常感谢!
(...)    
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
}
(...)