JavaScript: 1 неопределенное значение в результатах Promise.all

Вы должны сделать это так, как вы описали. MongoDB является нереляционной базой данных и не поддерживает объединения.

0
задан CertainPerformance 17 March 2019 в 23:28
поделиться

2 ответа

В первый раз вы нажимаете myPromise на myList, пока оно еще не определено.

Вы можете исправить это, полностью исключив переменную myPromise.

var myList = [];

for (let i = 1; i <= 20; i++) {
    myList.push(new Promise(function(resolve, reject) {
        resolve("ITEM " + i);
    }))
}

или подталкивание к myList впоследствии.

for (let i = 1; i <= 20; i++) {
    var myPromise = new Promise(function(resolve, reject) {
        resolve("ITEM " + i);
    })
    myList.push(myPromise);
}
0
ответ дан Michael 17 March 2019 в 23:28
поделиться

myPromise, который вы нажимаете на myList, создается после запуска конструктора Promise. Итак, на первой итерации myPromise равно undefined (а на последующих итерациях последняя myPromise помещается в массив).

Создайте Обещание, а затем немедленно нажмите на массив в той же итерации:

var myList = [];

for (let i = 1; i <= 20; i++) {
  var myPromise = new Promise(function(resolve, reject) {
    resolve("ITEM " + i);
  });
  myList.push(myPromise);
}
Promise.all(myList).then(function(values) {
  console.log(values);
});

console.log("End");

Может быть понятнее, если вы вручную поднимите myPromise (чтобы код был ближе к тому, как его выполняет интерпретатор):

var myPromise;
var myList = [];
for (let i = 1; i <= 20; i++) {
  myPromise = new Promise(function(resolve, reject) {
    resolve("ITEM " + i);
  });
  myList.push(myPromise);
}
Promise.all(myList).then(function(values) {
  console.log(values);
});

console.log("End");
[ 1110]

0
ответ дан CertainPerformance 17 March 2019 в 23:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: