JavaScript async 函数的优雅的异常处理

JavaScript async 函数的优雅的异常处理

背景

  1. 在开始公司的新项目时,新来的同事提出目前公司的 ajax 请求处理并不合理——无论什么状况返回结果的 HTTP 状态码都为 200; 应改根据不一样状况返回不一样的 HTTP 状态码。通过讨论,新项目采用上述方式返回处理结果,因此以往项目中根据返回结果的 errcode 判断是否错误的作法没法再适用,在接收 400 以上的结果时必须 catch.
  2. 使用 Promise.prototype.then().catch();
  3. 使用 async/await 而后使用 try/catch
  4. 我的认为使用 try/catch 不够优雅。

有没有优雅的 async/await 异常处理?

这个问题有大佬比我先想到javascript

还有对上文的引申java

解决方案

1. 方法定义

function to(promise) {
    if (!promise || !Promise.prototype.isPrototypeOf(promise)) {
        return new Promise((resolve, reject) => {
            reject(new Error('参数必须是 promise'));
        }).catch((err) => {
            return [err, null];
        });
    }
    return promise.then(data => {
        return [null, data];
    }).catch(err => {
        return [err, null];
    });
}

2. 如何使用

async function f() {
    const [error, data] = await to(...);
    if(error){
        ...
    }
    ...
}

最后

引用 segmentfault 用户 边城 的结论node

用什么方式取决于适用场景、团队约定和我的喜爱等多种因素,在不一样的状况下须要采用不一样的处理方式,并非说哪种就必定好于另外一种——合适的才是最好的!

欢迎转载,转载请注明出处:http://blog.kaguramea.me/archives/js-async-method-catchajax

相关文章
相关标签/搜索