美文网首页
js优雅的解决async/await函数的报错

js优雅的解决async/await函数的报错

作者: 陌客百里 | 来源:发表于2020-08-23 23:37 被阅读0次

*【序】(本文章主要是学习性质,对[原文](https://www.jianshu.com/p/2935c0330dd2)的二次精简和记录)今天要处理一个async/await中的错误,平时都是使用try/catch,突然想找找看是否有更优雅的方式,确实又学习到了不少,

问题一

  • 【疑惑】当我们在async函数中去处理错误时,正常都用try/catch,但是try/catch的嵌套另前端工程师颇为蛋疼,如下代码
async function asyncFunc() {
    try {
        const product = await Api.product({ id : 10 });
        if(!product) {
            console.log('No product found');
        }
    }
    catch(err) {
        console.log(err);
    }

    try {
        const saveProduct = await Api.save({
            id: product.id,
            name: product.name
        });
    }
    catch(err) {
        console.log(err);
    }

}

是否有一种更优雅的解决办法?

  • 【解惑】 github上有一个项目await-to-js,可以用promise来替代try/catch
  • 【关键】代码短小但用处很大
export function to<T, U = any>(
  promise: Promise<T>,
  errorExt?: object
): Promise<[U | null, T | undefined]> {
  return promise
    .then<[null, T]>((data: T) => [null, data])
    .catch<[U, undefined]>(err => {
      if (errorExt) {
        Object.assign(err, errorExt)
      }

      return [err, undefined]
    })
}

export default to

调用的效果

import to from './to.js';

async function asyncFunc() {
    let err, product, saveProduct;

    [err, product] = await to(Api.product({ id : 10 }));
    if(!product) {
        console.log('No product found');
    }

    [err, saveProduct] = await to(Api.save({
        id: product.id,
        name: product.name
    }));

    if(err) {
        console.log(err);
    }
}

相关文章

  • js优雅的解决async/await函数的报错

    *【序】(本文章主要是学习性质,对[原文](https://www.jianshu.com/p/2935c0330...

  • es6--async和await

    async 和 await被称为js异步的最终解决方案,那么我们来了解下:async:异步方法, await:等待...

  • js异步编程(updating)

    js 异步编程方式: Promise,generator/yield,async/await 回掉函数 js事件监...

  • ES8(一) —— async&await

    目录 async和普通函数的区别 await async/await处理多回调异步 async和await必须配合...

  • Async/await

    async/await是一种用来处理Promise的特殊语法,同时给人的感觉又非常优雅。 Async 函数 我们先...

  • 解决vue ES7语法下报ReferenceError: reg

    报错内容 问题原因: 项目中请求数据使用了异步函数,并用async 、await关键字修饰。async 、awai...

  • regeneratorRuntime is not define

    【报错原因】 使用了 async/await,没有正确配置 babel,导致语法不支持、报错。 【解决】 1、经测...

  • JS 中的 async/await

    async/await 是什么? async/await 是 ES2017 中新增的异步解决方案; await 只...

  • async、await

    async、await 的特点,优点和缺点,await 的原理是什么? 一个函数如果加上 async 那么该函数就...

  • ES7 Async/Await快速入门

    用法: 使用async 声明函数,在async函数内使用await async function xxx(){aw...

网友评论

      本文标题:js优雅的解决async/await函数的报错

      本文链接:https://www.haomeiwen.com/subject/dsqgjktx.html