2 обещания выполняются одновременно, когда «возврат» не используется - PullRequest
0 голосов
/ 01 октября 2019

Если я выполняю асинхронную операцию в JS и выполняю цепочку 2 .then вызовов, когда я использую ключевое слово return для асинхронной операции в первом .then, выполнение происходит, как ожидается:

  1. первая асинхронная операция выполняется через x промежуток времени
  2. вторая асинхронная операция выполняется через 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 означает ждать разрешения первого обещания, прежде чем перейти ко второму обещанию? поэтому, если возврат пропущен, вторая асинхронная операция начинается перед ожиданием разрешения первого обещания?

1 Ответ

1 голос
/ 01 октября 2019

Если вы опустите ключевое слово return, второе doAsync() будет назначено немедленно, а первое then завершится.

Вы не будете связывать свои Обещания, если опустите ключевое слово return.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...