Таким образом, в основном я обнаружил, что обещания разрешаются одновременно, когда вы создаете массив обещаний и работаете с отдельными обещаниями в цикле ... Но это не работает, когда вы создаете индивидуальные обещания и имеете дело сони в цикле ...
Таким образом, в основном этот вопрос возник из-за того, что я играл с axios, и я изначально думал, что это ошибка (https://github.com/axios/axios/issues/1973). Однако вскоре я обнаружил, что это на самом деле проблема с неправильным пониманием некоторыхчасть Promise, особенно await Promise
. Однако я не думаю, что смог бы найти что-либо в документе MDN, если бы не пропустил что-то.
Это не будет работать :
let results = [];
for (let i=1; i<=5; i++) {
let promise = new Promise(function(resolve, reject) {
setTimeout(function() {
resolve('foo');
}, 10000);
})
results.push(await promise);
}
Но это будет :
let results = [];
const promises = [
new Promise(function(resolve, reject) {
setTimeout(function() {
resolve('foo');
}, 10000);
}),
new Promise(function(resolve, reject) {
setTimeout(function() {
resolve('foo');
}, 10000);
}),
new Promise(function(resolve, reject) {
setTimeout(function() {
resolve('foo');
}, 10000);
}),
new Promise(function(resolve, reject) {
setTimeout(function() {
resolve('foo');
}, 10000);
}),
new Promise(function(resolve, reject) {
setTimeout(function() {
resolve('foo');
}, 10000);
}),
];
for (let i=1; i<=5; i++) {
results.push(await promises[i-1]);
}
Я бы ожидал, что в обоих случаях массив обещаний (results
) будет разрешаться одновременно.
Однако в первом примере обещания фактически разрешаются одно за другим.