Причина, по которой это не работает, заключается в том, что then
является асинхронным. В момент выполнения обратного вызова i
будет иметь максимальное значение для всех обратных вызовов (в данном примере это означает 5
).
Вместо этого используйте индекс, предоставленный forEach
* 1008. * l oop (второй аргумент, предоставленный функции обратного вызова).
const arr = ['X', 'Y', 'Z', 'A', 'B', 'C'];
this.work.forEach((item, index) => {
const chr = arr[index];
this.getData().then(value => {
item.minValue = value[0].set.min[chr];
});
});
// or using an async arrow function
this.work.forEach(async (item, index) => {
const chr = arr[index];
const value = await this.getData();
item.minValue = value[0].set.min[chr];
});
Обратите внимание, что, вероятно, не стоит делать один и тот же асинхронный вызов на каждой итерации, и вы, скорее всего, захотите переместить запрос данных до l oop. Я предполагаю, что функция обертывания уже использует ключевое слово async
, так как в вашем примере вы также используете await this.getData()
.
const arr = ['X', 'Y', 'Z', 'A', 'B', 'C'];
const value = await this.getData();
this.work.forEach((item, index) => {
const chr = arr[index];
item.minValue = value[0].set.min[chr];
});
Подробнее о проблеме i
можно узнать здесь. .