Если я выполняю асинхронную операцию в JS и выполняю цепочку 2 .then
вызовов, когда я использую ключевое слово return для асинхронной операции в первом .then
, выполнение происходит, как ожидается:
- первая асинхронная операция выполняется через x промежуток времени
- вторая асинхронная операция выполняется через x промежуток времени
, но если асинхронная операция в первой .then
явно не выполняетсяиспользуйте return
, обе операции завершаются одновременно, x количество времени после начальной асинхронной операции, пример:
сценарий 1:
function doAsync() {
return new Promise(res => {
setTimeout(() => res('hi'), 3000);
});
}
doAsync().then(() => {
console.log('async then 1'); // executes 3 seconds after
return doAsync();
}).then(() => {
console.log('async then 2'); // executes 6 seconds after
});
сценарий 2:
function doAsync() {
return new Promise(res => {
setTimeout(() => res('hi'), 3000);
});
}
doAsync().then(() => {
console.log('async then 1'); // executes 3 seconds after
doAsync(); // no return
}).then(() => {
console.log('async then 2'); // executes 3 seconds after
});
почему это? return
означает ждать разрешения первого обещания, прежде чем перейти ко второму обещанию? поэтому, если возврат пропущен, вторая асинхронная операция начинается перед ожиданием разрешения первого обещания?