Как использовать try-catch при ожидании множества обещаний без Promise.all? - PullRequest
0 голосов
/ 21 июня 2019

Мне нужно выполнить что-то вроде:

let promise1 = getPromise1();
let promise2 = getPromise2();
let promise3 = getPromise3();

// some more code
...

result1 = await promise1;
// work with result1 in specific way

result2 = await promise2;
// work with result2 in specific way

result3 = await promise3;
// work with result3 in specific way

Поскольку мне нужно выполнять довольно уникальные вещи для каждого из результатов, я не хочу работать с Promise.all, так как это приведет к некоторой неприятной структуре if-else.

У меня вопрос - откуда взялся блок try{}catch(){}? Даже если одно из обещаний дает ошибку, я не хочу, чтобы оно влияло на другие. Они должны завершить выполнение независимо. Должен ли я обернуть один resultX в try{} или мне обернуть let promiseX =.... Или оба?

Имеете ли вы в виду лучший дизайн?

Спасибо!

1 Ответ

0 голосов
/ 21 июня 2019

Как вы упомянули, если вы хотите по отдельности работать с разными обещаниями, вы можете просто заключить их в отдельный блок try/catch.


let result1 = []; // for simplicity

try {
  result1 = await getPromise1()
} catch (error) {
  console.log(`Error occured: ${error}`);
  // fallback
  result1 = someComplicatedOperationHere();
}

Вы можете использовать аналогичный подход кдругие n обещания, которые у вас есть, и, наконец, у вас будет result1 .. resultN, содержащий что-то.Либо успешный результат, либо запасной вариант (или как вы хотите его обработать).

Однако учтите, что если вы используете await и у вас несколько разных вызовов обещаний, они будут синхронно выбираться для вашего приложения.Значение: они будут (a)wait для первого обещания вернуться и затем двигаться дальше.

Если вы не хотите этого, вам придется использовать Promise.all.(Классическая await in for loop своего рода проблема.)

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