您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“怎么捕獲await錯誤”,內容詳細,步驟清晰,細節處理妥當,希望這篇“怎么捕獲await錯誤”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
Promise 是一種在 JavaScript 中用于處理異步操作的機制。
創建一個 Promise 實例。這通常是通過調用 Promise 構造函數來完成的,并將一個函數作為參數傳遞給構造函數,該函數接收兩個參數:resolve 和 reject。resolve 和 reject 分別用于處理 Promise 的成功和失敗結果。
在函數體內執行異步操作。當異步操作完成時,如果執行成功,則調用 resolve 函數來將 Promise 的狀態變為“已完成”,并將結果作為參數傳遞給 resolve 函數;如果執行失敗,則調用 reject 函數將 Promise 的狀態變為“已拒絕”,并將失敗的原因作為參數傳遞給 reject 函數。
使用 then 方法來處理 Promise 的成功和失敗結果。then 方法接收兩個參數:一個處理成功結果的函數和一個處理失敗結果的函數。在 Promise 狀態變為“已完成”或“已拒絕”后,then 方法會自動執行相應的處理函數。
示例代碼如下:
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 塊,代碼看起來就很臃腫,那么有什么更好的處理這些錯誤的辦法呢?
await-to-js
這個項目的 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錯誤”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。