Вы должны сделать это так, как вы описали. MongoDB является нереляционной базой данных и не поддерживает объединения.
В первый раз вы нажимаете 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);
}
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");