ES7中await如何優(yōu)雅的捕獲異常詳解
本篇文章介紹的是
ES7中await語法糖在調(diào)用的時候出現(xiàn)異常如何捕獲?
傳統(tǒng)方式
try {
const res = await getUser(id)
}catch(err){
console.log(err)
}await讓我們使用異步方式開發(fā)的代碼簡便不少,但是每次使用如果都用try..catch來捕獲異常反而埋沒了它的優(yōu)勢。
[ err, user ] = await to(UserModel.findById(1));
如果我們使用await同時還能捕獲異常,那顯然是很完美的實現(xiàn)方式。await-to-js出場~~
await-to-js
安裝
npm i await-to-js --save
使用
要求Node 7.6 (或以上),需要
ES7的轉(zhuǎn)義器,支持TypeScript
import to from 'await-to-js';
// 如果是Node環(huán)境,應(yīng)該這樣使用
// const to = require('await-to-js').default;
async function asyncFunctionWithThrow() {
const [err, user] = await to(UserModel.findById(1));
if (!user) throw new Error('User not found');
}TypeScript的使用方式
interface ServerResponse {
test: number;
}
const p = Promise.resolve({test: 123});
const [err, data] = await to<ServerResponse>(p);
console.log(data.test);源碼
"main": "dist/await-to-js.umd.js",
/**
* @param { Promise } promise對象
* @param { Object= } 附加的錯誤
* @return { Promise }
*/
export function to<T, U = Error> (
promise: Promise<T>,
errorExt?: object
): Promise<[U, undefined] | [null, T]> {
return promise
.then<[null, T]>((data: T) => [null, data])
.catch<[U, undefined]>((err: U) => {
if (errorExt) {
const parsedError = Object.assign({}, err, errorExt);
return [parsedError, undefined];
}
return [err, undefined];
});
}
export default to;這段代碼很簡單,定義了一個函數(shù)to,傳入的參數(shù)兩個:promise對象和附加信息。 返回一個promise。 如果promise沒有異常走的then方法,則返回一個null和data組成的數(shù)組,否則返回錯誤信息合并上傳入的附加信息 和undefined組成的數(shù)組。
測試用例
目錄src/await-to-js.test.ts
測試用例分別測試了沒有異常的單值,有異常的單值,傳入了附加信息的異常,沒有異常的對象。
結(jié)束語
看到如此優(yōu)雅的能在一行實現(xiàn)了異步編程還能返回其錯誤對象,比try..catch優(yōu)雅很多。我們開發(fā)盡量讓自己的代碼如藝術(shù)一樣優(yōu)雅。不僅能賞心悅目,還能易于維護。我們也能成為編程界的藝術(shù)家。
到此這篇關(guān)于ES7中await如何優(yōu)雅的捕獲異常的文章就介紹到這了,更多相關(guān)ES7 await捕獲異常內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
layui table表格數(shù)據(jù)的新增,修改,刪除,查詢,雙擊獲取行數(shù)據(jù)方式
今天小編就為大家分享一篇layui table表格數(shù)據(jù)的新增,修改,刪除,查詢,雙擊獲取行數(shù)據(jù)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11
JavaScript中的await函數(shù)使用小結(jié)
async 函數(shù)是 AsyncFunction 構(gòu)造函數(shù)的實例,并且其中允許使用 await 關(guān)鍵字,async 和 await 關(guān)鍵字讓我們可以用一種更簡潔的方式寫出基于 Promise 的異步行為,而無需刻意地鏈?zhǔn)秸{(diào)用 promise,這篇文章主要介紹了JavaScript中的await,需要的朋友可以參考下2024-01-01
javascript 使用for循環(huán)時該注意的問題-附問題總結(jié)
所謂for循環(huán)就是重復(fù)的執(zhí)行一段代碼,for循環(huán)也是希望在創(chuàng)建循環(huán)時常會用到的工具,這篇內(nèi)容主要給大家介紹javascript 使用for循環(huán)時該注意的問題-附問題總結(jié),需要的朋友可以參考下2015-08-08
js數(shù)字轉(zhuǎn)換為float,取N位小數(shù)
在javascript中不分單精度float和雙精度double,凡事有小數(shù)的變量都認為是float,因此要取小數(shù)后的n位,要用方法toFixed(n)來得到2014-02-02

