async await 處理報錯的方式

2022-04-28 19:00:11 字數 1466 閱讀 4070

async,await是es7新增的api,比es6的promise更加優雅,但是最近在使用await時發現處理錯誤並不像promise這麼簡單,下面是簡單的應用示例。

首先,我們先模擬幾個非同步的操作

var p1 = function

() , 2000)

})}

var p2 = function

() , 1000)

})}

var p3 = function

()

然後我們看使用es6的promise處理非同步操作並捕獲錯誤

//

用promise控制執行流程

var test = function

() ).

catch(function

(e) )

}).catch(function

(e) )

} //用promise.all控制執行流程

var test1 = function

() ).

catch(function

(e) )

}

這樣寫可以很好地處理錯誤,但是並不美觀,所以我們要使用async,await,使其更像同步**

//

用await來控制流程,看著比用promise控制要優雅簡介許多,但是並沒有處理錯誤

var test2 = async function

()

這樣確實優雅了很多,但是如何處理錯誤呢?我們用try,catch語句來捕獲錯誤

//

用try,catch處理報錯,但是try catch用多了會影響效能,並且這樣寫也很不美觀

var test3 = async function

()

catch

(e)

}

try catch可以捕獲錯誤,但是這樣寫還是不夠美觀,並且用多了會有效能問題,所以我們就到了重點,今天的to方法

//

使用async/await時處理報錯的方法

function

to(promise) ).

catch((err) =>);

}return promise.then(function

() ).

catch(err =>);

}

封裝的to方法,原理是用promise的then,catch方式捕捉錯誤並丟擲,使用方式是這樣的

//

用to方法處理錯誤資訊,**也比較看著整潔易懂

var test4 = async function

() let [err2,res2] =await to(p2());

if(err2)

p3();

}

這樣**是不是優雅了很多,並且效能也好些。

async await(優勢在於處理then鏈)

await 可以認為是 async wait 的簡寫,await 用於等待乙個非同步方法執行完成。async await其實是promise的語法糖,它能實現的效果都能用then鏈來實現,它是為優化then鏈而開發出來的。從字面上來看,async是 非同步 的簡寫,await譯為等待,所以我們很好理...

async await處理非同步問題

在編寫網頁的時候我們常常會遇到非同步問題,async await是es6提出的解決非同步的方法,下面我們來看看這個方法怎麼實現解決非同步的,function foo 1000 console.log 2 答案肯定是2,1 因為settimeout是乙個非同步執行語句,所以下面乙個會先執行完後再執行非...

async await進行非同步處理

參考 await 只能出現在 async 函式中 async 函式返回的是乙個 promise 物件。async 函式 包含函式語句 函式表示式 lambda表示式 會返回乙個 promise 物件,如果在函式中return乙個直接量,async 會把這個直接量通過promise.resolve 封...