Я пытаюсь понять, как работает Promise.all, и кажется, что все должно быть просто. Насколько я понимаю, Promise.all принимает массив обещаний, а затем выполняет их все одновременно.
Вот некоторый код, который я написал и выполняю через узел (8.10.0), который, как я ожидал, будет работать правильно:
const getFirstPromise = function() {
return new Promise((resolve, reject) => {
setTimeout(function(){
console.log("1");
resolve("First!"); // Yay! Everything went well!
}, 2500);
});
};
const getSecondPromise = function() {
return new Promise((resolve, reject) => {
setTimeout(function(){
console.log("2");
resolve("Second!"); // Yay! Everything went well!
}, 250);
});
};
const getThirdPromise = function() {
return new Promise((resolve, reject) => {
setTimeout(function(){
console.log("3");
resolve("Third!"); // Yay! Everything went well!
}, 1000);
});
};
const getFourthPromise = function () {
return new Promise((resolve, reject) => {
setTimeout(function(){
console.log("4");
resolve("Fourth!"); // Yay! Everything went well!
}, 500);
});
};
const tasks = [
getFirstPromise,
getSecondPromise,
getThirdPromise,
getFourthPromise
];
Promise.all(tasks).then((result) => console.log("Done alling the promises: ", result)).catch(err => console.log(err));
Как написано, это не выполняет ни одно из обещаний.
Если я изменю коллекцию задач так, чтобы она выглядела следующим образом:
const tasks = [
getFirstPromise(),
getSecondPromise(),
getThirdPromise(),
getFourthPromise()
];
тогда все обещания выполняются, но если я закомментирую строку Promise.all, они все равно будут выполняться.
Я ожидал создать коллекцию обещаний, которые НЕ будут выполняться до тех пор, пока не будет вызван Promise.all.
Пожалуйста, либо объясните, как добиться того, чего я ожидаю, ИЛИ объясните, как мое понимание Promise.all является ошибочным, или скажите, как еще мне следует создавать свои обещания.
Меня не интересует множество других способов выполнения этой серии обещаний. Я просто хочу понять, как Promise.all должен работать с коллекцией обещаний, если я не хочу, чтобы код обещания выполнялся до тех пор, пока не будет выполнен Promise.all.