JS для элемента в элементах -> цепочка обещаний получает неправильные значения - PullRequest
0 голосов
/ 03 марта 2020

Я не могу gr asp, как получить правильное значение. Ударь мою проблему.

Так, например, я иногда получаю список клиентов, который никогда не содержит двух одинаковых людей. Затем для каждого из них я хочу добавить еще одно обещание, в котором я передаю имя каждого. Проблема в том, что иногда я получаю два, называемых "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
}
(...)

1 Ответ

1 голос
/ 03 марта 2020

Если значения clients изменяются во время выполнения вашей программы, это может быть вашей проблемой. Поскольку for in l oop делает ссылку на ключи, но не на значения, а clients[client] оценивается в более поздний момент времени из-за цепочки обещаний.

У вас есть два варианта: либо переключитесь на for of l oop, чтобы получить значения объекта вместо ключей, либо добавьте const value = clients[client] внутри тела l oop и используйте value в своих замыканиях. Оба эти метода будут извлекать значения во время выполнения l oop, что вам и нужно.

...