Понимание обещаний: необходимо объединить несколько результатов - PullRequest
0 голосов
/ 25 декабря 2018

Как мне обработать результаты более чем одного Обещания?Скажите результаты a DoA и b DoB в DoNext

Я прочитал https://developer.mozilla.org/de/docs/Web/JavaScript/Guide/Using_promises Он вводит синтаксис «then», который должен заменить «пирамиду обратного вызова doom», однако я неНе понимаю следующее:

DoA.then(function(a){
    return DoB(a)
})
.then(function(b){
    DoNext(a,b);
})

При вызове DoNext a неизвестно.Я понимаю, что это потому, что a определяется только в анонимной функции в строке 2. Однако в «пирамиде обратного вызова doom» я могу получить доступ к a, поскольку в этом шаблоне DoNext находится внутри анонимной функции, которая является успешным обратным вызовом DoA.Как мне справиться с этим в тогдашнем синтаксисе?

1 Ответ

0 голосов
/ 26 декабря 2018

Существует несколько способов обработки нескольких ситуаций Promise.

1- Цепное обещание (хотя и уродливо)

DoA.then(a => {
    DoB(a).then(.....)

})
.catch(error => console.log(error));

2- Promise.all ()

var promise1 = Promise.resolve(3);
var promise2 = 42;
var promise3 = new Promise(function(resolve, reject) {
  setTimeout(resolve, 100, 'foo');
});

Promise.all([promise1, promise2, promise3]).then(function(values) {
  console.log(values);
});
// expected output: Array [3, 42, "foo"]

3- асинхронная функция (но ознакомьтесь с подробностями)

(async () => {

  const a = await DoA(); // DoA must be a Promise
  const b = await DoB(a); // DoB must be a Promise
  // rest of the code

})();
...