Асинхронное ожидание, продолжить без улова - PullRequest
1 голос
/ 03 июня 2019

У меня есть следующий код

  try {
    const result = await doSomething();
  }
  catch {
    console.log('Error loaidng rejected data');
  }

  // rest of code

Моя проблема в том, что я ничего не делаю в сегменте catch. Я включаю его только для того, чтобы код продолжался в случае ошибки. Если я уберу защелку, то все взорвется. Есть ли в любом случае я могу добиться того же без улова? и без использования обещаний?

Ответы [ 3 ]

2 голосов
/ 03 июня 2019

Это Обещание, тогда вы можете игнорировать функцию catch.

const result = await doSomething().catch(() => null);

В случае ошибки ничего не делать, ваш код продолжит выполнение на следующей строке, но result в этом случае не определено(ошибка).

1 голос
/ 03 июня 2019

Могу ли я сделать это без обещания?

Нет, подождите, это просто синтаксический сахар, чтобы обернуть обещание.Если ваша асинхронная функция не возвращает обещание, тогда не имеет смысла использовать await.

Вы можете перехватить ошибку внутри doSomething и разрешить обещание с нулевым или неопределенным значением, чтобы сохранить работу.

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

Да, в большинстве случаев блок try / catch огромен, для краткости вы можете использовать await-to-js libs. Таким образом, мы можем использовать, как показано ниже.

const [err, result] = await to(doSomething());

Обратите внимание, что он никогда не взорвется, потому что мы добавили обработчик catch для этого обещания.

Я просто скопировал источник из https://github.com/scopsy/await-to-js.

export function to<T, U = Error> (
  promise: Promise<T>,
  errorExt?: object
): Promise<[U | null, T | undefined]> {
  return promise
    .then<[null, T]>((data: T) => [null, data])
    .catch<[U, undefined]>((err: U) => {
      if (errorExt) {
        Object.assign(err, errorExt);
      }

      return [err, undefined];
    });
}

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