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

相關文章
相關標籤/搜索