Async Await, 继续不带catch

3

我有如下代码

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

  // rest of code

我的问题是在catch段中没有做任何事情。我只是包含它以防万一出现错误,如果我删除catch,整个代码会崩溃。有没有办法在不使用catch和promise的情况下实现同样的效果?

3个回答

9

这是一个Promise,因此您可以忽略catch函数。

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

在错误情况下不执行任何操作,您的代码将继续执行下一行,但在此情况下(错误情况),result未定义。


就是我想要的。 - tmp dev

2

没有promise,我能做吗?

不行,await只是用来包装promise的语法糖。如果你的异步函数不返回promise,那么使用await就没有意义。

你可以在doSomething内部捕获错误,并解析为null或undefined以保持正常运作。

Original Answer翻译成"最初的回答"。


0

是的,大多数时候try/catch块都很庞大,为了使其简洁,您可以利用await-to-js库。因此,我们可以像下面这样使用。

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

请注意,由于我们为此Promise附加了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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接