Если вы можете, я бы порекомендовал легкий для чтения и понимания цикла с await / async. Обратите внимание на то, что верхний уровень await является очень недавним дополнением, поэтому вы должны обернуть его в некоторую асинхронную функцию (что вы, вероятно, все равно сделаете).
Если вы не можете использовать async / await, вы можете использовать reduce
сПервоначально разрешенное обещание связывает последующие вызовы.
Обратите внимание , что я использовал функцию sleep
, которая разрешает обещание через некоторое время. Звонок на sleep
должен быть взаимозаменяем с вызовами Axios.
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
const data = [1000, 2000, 3000];
function withReduce() {
console.log('Sequential Promises with Reduce:');
return data.reduce((previousPromise, ms) => {
return previousPromise
.then(() => {
console.log(`sleeping for ${ms}ms`);
return sleep(ms);
});
}, Promise.resolve());
}
async function withAsync() {
console.log('Sequential Promises with for of and await:');
for (let ms of data) {
console.log(`sleeping for ${ms}ms`);
await sleep(ms);
}
}
withReduce().then(withAsync);