После того, как состояние отклонения выполнено в обещании, остальные обещания также выполняются в программе? - PullRequest
0 голосов
/ 03 сентября 2018

Я использую код обещания, особенно с использованием Promise.all() В одной из функций, которые я назвал состоянием отклонения, поэтому после выполнения состояния отклонения (сбоя) будет получено сообщение об ошибке, а остальные обещания не должны выполняться. Это правило в обещании. Но в моем коде я назвал состояние отклонения. Функция Catch ловит сообщение об ошибке. Хорошо. Но опять-таки контроль переходит к другим обещаниям и распечатке логов в моем коде Кто-нибудь может объяснить, почему?

var p1 = new Promise(function(resolve, reject) {
  setTimeout(function() {
    console.log("One dude");
    resolve("one");
  }, 3000);
});

var p2 = new Promise(function(resolve, reject) {
  setTimeout(function() {
    reject("TWO");
  }, 1000);
});

var p3 = new Promise(function(resolve, reject) {
  setTimeout(function() {
    console.log("Three dude");
    resolve("Three");
  }, 4000);
});


Promise.all([p1, p2, p3]).then(function(msg) {
  console.log(msg);
}).catch(function(err) {
  return console.log(err);
});

Я получаю вывод:

TWO
One dude
Three dude


I'm expecting output
TWO

1 Ответ

0 голосов
/ 04 сентября 2018

Ваши три обещанных setTimeouts не зависят друг от друга.

Тот факт, что человек отвергает, не имеет отношения к двум, которые решают. Каждый из трех конструкторов обещаний будет выполняться независимо от того, что происходит в любом из остальных, и будет делать это независимо от того, объединяются ли обещания с Promise.all().

Агрегирование с Promise.all() рассматривает окончательное урегулирование обещаний, не затрагивая (обычно асинхронные) действия, которые привели к их урегулированию.

Учитывая все это (и значения времени, передаваемые в setTimeouts), должно быть (я надеюсь) не удивительно, что вы видите:

  • ДВА (через 1 секунду)
  • Один чувак (через 3 секунды)
  • Три чувака (через 4 секунды)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...