最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

await 錯誤捕獲實現(xiàn)方式源碼解析

 更新時間:2022年12月25日 11:50:19   作者:codeniu  
這篇文章主要為大家介紹了await 錯誤捕獲實現(xiàn)方式源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

前言

Promise 是一種在 JavaScript 中用于處理異步操作的機制。Promise 在開發(fā)中被廣泛使用,這篇文章將學習如何優(yōu)雅的捕獲 await 的錯誤。

資源:

Promise 的使用方法

  • 創(chuàng)建一個 Promise 實例。這通常是通過調用 Promise 構造函數(shù)來完成的,并將一個函數(shù)作為參數(shù)傳遞給構造函數(shù),該函數(shù)接收兩個參數(shù):resolve 和 reject。resolve 和 reject 分別用于處理 Promise 的成功和失敗結果。
  • 在函數(shù)體內執(zhí)行異步操作。當異步操作完成時,如果執(zhí)行成功,則調用 resolve 函數(shù)來將 Promise 的狀態(tài)變?yōu)?ldquo;已完成”,并將結果作為參數(shù)傳遞給 resolve 函數(shù);如果執(zhí)行失敗,則調用 reject 函數(shù)將 Promise 的狀態(tài)變?yōu)?ldquo;已拒絕”,并將失敗的原因作為參數(shù)傳遞給 reject 函數(shù)。
  • 使用 then 方法來處理 Promise 的成功和失敗結果。then 方法接收兩個參數(shù):一個處理成功結果的函數(shù)和一個處理失敗結果的函數(shù)。在 Promise 狀態(tài)變?yōu)?ldquo;已完成”或“已拒絕”后,then 方法會自動執(zhí)行相應的處理函數(shù)。

示例代碼如下:

const myPromise = new Promise(function(resolve, reject) {
  // 執(zhí)行異步操作
  setTimeout(function() {
    // 異步操作成功
    resolve('Success');
  }, 1000);
});
// 處理 Promise 的成功和失敗結果
myPromise.then(function(result) {
  // 處理成功結果
  console.log(result);
}).catch(function(err){
  // 處理失敗
  console.log(err)
})

異步函數(shù)正在等待 Promise,因此當 promise 遇到錯誤時,它會拋出一個異常,該異常將在 promise 的 catch 方法中捕獲。

其他處理錯誤的方式:

try{
    const res = await myPromise()
}catch(e){
    console.log(e)
}

當代碼中有大量的異步操作時,就需要有很多的try/catch 塊,代碼看起來就很臃腫,那么有什么更好的處理這些錯誤的辦法呢?

await-to-js

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 函數(shù)接收一個 Promise,然后將成功響應解析為數(shù)組,并將返回數(shù)據(jù)作為第二項。從捕獲中收到的錯誤作為第二項。

源碼

/**
 * @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 對象作為參數(shù)。該函數(shù)返回一個新的 Promise。

原理是使用 then 方法處理 Promise 的成功結果,并使用 catch 方法處理 Promise 的失敗結果。如果 Promise 執(zhí)行成功,則會將結果包裝成一個包含兩個元素的數(shù)組并作為新的 Promise 的成功結果返回;如果 Promise 執(zhí)行失敗,則會將錯誤對象包裝成一個包含兩個元素的數(shù)組并作為新的 Promise 的失敗結果返回。

總結

使用await-to-js,得以一行代碼完成對異步代碼錯誤的捕獲,閱讀文章得知,await-to-js 是作者通過goLang啟發(fā)得來的靈感。更加說明了融會貫通,學以致用的重要性。

以上就是await 錯誤捕獲實現(xiàn)方式源碼解析的詳細內容,更多關于await 錯誤捕獲的資料請關注腳本之家其它相關文章!

相關文章

  • JS前端監(jiān)控采集用戶行為的N種姿勢

    JS前端監(jiān)控采集用戶行為的N種姿勢

    這篇文章主要為大家介紹了JS前端監(jiān)控采集用戶行為的N種姿勢,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • '2'>'10'==true?解析JS如何進行隱式類型轉換

    '2'>'10'==true?解析JS如何進行隱式類型轉換

    這篇文章主要為大家介紹了'2'>'10'==true?解析JS如何進行隱式類型轉換示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • JavaScript數(shù)組去重方案

    JavaScript數(shù)組去重方案

    這篇文章主要介紹了JS數(shù)組方案,先總結一下我們數(shù)組的方法:pop、push、shift、unshift、slice、splice、sort、reverse、concat、join、indexOf、lastIndexOf、map、forEach,下面文章將詳細對他們做個詳細介紹,需要的朋友可以參考一下
    2021-09-09
  • 微信小程序 頁面跳轉傳遞值幾種方法詳解

    微信小程序 頁面跳轉傳遞值幾種方法詳解

    這篇文章主要介紹了微信小程序 頁面跳轉傳遞值幾種方法詳解的相關資料,需要的朋友可以參考下
    2017-01-01
  • JS算法題解搜索插入位置方法示例

    JS算法題解搜索插入位置方法示例

    這篇文章主要為大家介紹了JS算法題解搜索插入位置方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • 微信小程序 加載 app-service.js 錯誤解決方法

    微信小程序 加載 app-service.js 錯誤解決方法

    這篇文章主要介紹了微信小程序 加載 app-service.js 錯誤詳解的相關資料,在開發(fā)微信小程序過程中出現(xiàn)了app-services.js的錯誤,并解決此問題,需要的朋友可以參考下
    2016-10-10
  • JS前端使用canvas動態(tài)繪制函數(shù)曲線示例詳解

    JS前端使用canvas動態(tài)繪制函數(shù)曲線示例詳解

    這篇文章主要為大家介紹了JS前端使用canvas畫函數(shù)曲線的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • WebWorker 封裝 JavaScript 沙箱詳情

    WebWorker 封裝 JavaScript 沙箱詳情

    這篇文章主要介紹了WebWorker 封裝 JavaScript 沙箱,在前文 quickjs 封裝 JavaScript 沙箱詳情 已經(jīng)基于 quickjs 實現(xiàn)了一個沙箱,今天這篇文章再基于 web worker 實現(xiàn)備用方案,需要的朋友可以參考一下
    2021-10-10
  • 總結JavaScript中BigIn函數(shù)常見的屬性

    總結JavaScript中BigIn函數(shù)常見的屬性

    本文基于JavaScript基礎,介紹了 BigInt 函數(shù),常見的屬性,通過 BigInt 函數(shù)進行數(shù)字運算符的比較。布爾運算等等,通過按案例的分析進行詳細的講解,需要的朋友可以參考一下
    2021-10-10
  • 本地存儲localStorage設置過期時間示例詳解

    本地存儲localStorage設置過期時間示例詳解

    這篇文章主要為大家介紹了本地存儲localStorage設置過期時間示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01

最新評論

南城县| 桦南县| 石渠县| 黄石市| 乌兰浩特市| 澄城县| 九寨沟县| 怀来县| 曲水县| 南投县| 华宁县| 繁昌县| 永定县| 巩留县| 谢通门县| 凤凰县| 卢湾区| 马关县| 沁阳市| 东丰县| 永德县| 手机| 渝北区| 乌什县| 普兰县| 安仁县| 万年县| 平乐县| 柳河县| 长乐市| 舞阳县| 西充县| 奈曼旗| 勃利县| 宿州市| 会昌县| 高安市| 太康县| 荣成市| 洪雅县| 广元市|