Я пытаюсь разбить обещания, так как хочу в конечном итоге вернуть результаты SQL-запроса в рамках обещания myPromise
, чтобы я закончил со списком результатов многих SQL-запросов.
var myList = [];
for (let i = 1; i <= 20; i++) {
var myPromise = new Promise(function(resolve, reject) {
myList.push(myPromise);
resolve("ITEM " + i);
})
}
Promise.all(myList).then(function(values) {
console.log(values);
});
console.log("End");
Выход:
[ undefined,
'ITEM 1',
'ITEM 2',
'ITEM 3',
'ITEM 4',
'ITEM 5',
'ITEM 6',
'ITEM 7',
'ITEM 8',
'ITEM 9',
'ITEM 10',
'ITEM 11',
'ITEM 12',
'ITEM 13',
'ITEM 14',
'ITEM 15',
'ITEM 16',
'ITEM 17',
'ITEM 18',
'ITEM 19' ]
Как я понимаю, как это работает: Мой цикл немедленно добавляет новое обещание к myList
, затем, когда оно разрешено, обещание заменяется строковым значением, переданным в resolve
.
Это работает хорошо, но в итоге я получаю 1 неопределенное значение. У меня есть всего 20 пунктов, что ожидается, но один не определен. Почему это?