У меня есть две функции: одна функция asyncTest_returnPromise просто возвращает обещание, а другая функция asyncTest 3 раза вызывает это обещание, вызывая Promise.all (обещания) для массива обещаний. В каждом обещании в массиве я отправляю одно значение ("Foo") на консоль перед вызовом функции asyncTest_returnPromise и отправляю другое значение ("Bar") на консоль после ее вызова.
Учитывая мое понимание функции Promise.all, я ожидал, что каждое обещание в массиве будет обработано только после того, как будет выполнено последующее обещание, то есть оба оператора console.log находятся внутри каждого обещания в массив, результат был бы: Foo Bar Foo Bar Foo Bar
Вместо этого, однако, вывод выглядит так: Foo Foo Foo Bar Bar Bar
Как и все экземпляры "Foo" были отправлены на консоль еще до первого «бара», мне кажется, эти обещания должны обрабатываться одновременно.
Вот две функции:
function asyncTest_returnPromise() {
return new Promise((resolve, reject) => {
resolve()
})
}
function asyncTest() {
var promises = []
for (i = 0; i < 3; i++) {
promises.push(new Promise((resolve, reject) => {
console.log("Foo")
asyncTest_returnPromise().then(_ => {
console.log("Bar")
resolve();
})
}))
}
Promise.all(promises)
}
asyncTest();
Итак, я хотел бы знать, неправильно ли я понял цель Promise.all или как она работает? Вызывает ли какая-то другая часть моего кода все выходные данные "foo" перед всеми выходными данными "bar"? Что мне нужно сделать, чтобы завершить каждое обещание, прежде чем перейти к следующему?