<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Promise 是一種在 JavaScript 中用於處理非同步操作的機制。Promise 在開發中被廣泛使用,這篇文章將學習如何優雅的捕獲 await 的錯誤。
資源:
範例程式碼如下:
const myPromise = new Promise(function(resolve, reject) { // 執行非同步操作 setTimeout(function() { // 非同步操作成功 resolve('Success'); }, 1000); }); // 處理 Promise 的成功和失敗結果 myPromise.then(function(result) { // 處理成功結果 console.log(result); }).catch(function(err){ // 處理失敗 console.log(err) })
非同步函數正在等待 Promise,因此當 promise 遇到錯誤時,它會丟擲一個異常,該異常將在 promise 的 catch 方法中捕獲。
其他處理錯誤的方式:
try{ const res = await myPromise() }catch(e){ console.log(e) }
當程式碼中有大量的非同步操作時,就需要有很多的try/catch 塊,程式碼看起來就很臃腫,那麼有什麼更好的處理這些錯誤的辦法呢?
這個專案的 slogan 是:
Async await wrapper for easy error handling
非同步等待包裝,方便錯誤處理
用法:
import to from 'await-to-js'; [ err, user ] = await to(UserModel.findById(1)); if(!user) return cb('No user found');
to 函數接收一個 Promise,然後將成功響應解析為陣列,並將返回資料作為第二項。從捕獲中收到的錯誤作為第二項。
/** * @param { Promise } promise * @param { Object= } errorExt - Additional Information you can pass to the err 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;
接收一個 Promise 範例和一個可選的 errorExt 物件作為引數。該函數返回一個新的 Promise。
原理是使用 then 方法處理 Promise 的成功結果,並使用 catch 方法處理 Promise 的失敗結果。如果 Promise 執行成功,則會將結果包裝成一個包含兩個元素的陣列並作為新的 Promise 的成功結果返回;如果 Promise 執行失敗,則會將錯誤物件包裝成一個包含兩個元素的陣列並作為新的 Promise 的失敗結果返回。
使用await-to-js,得以一行程式碼完成對非同步程式碼錯誤的捕獲,閱讀文章得知,await-to-js 是作者通過goLang啟發得來的靈感。更加說明了融會貫通,學以致用的重要性。
以上就是await 錯誤捕獲實現方式原始碼解析的詳細內容,更多關於await 錯誤捕獲的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45