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

ES7中await如何優(yōu)雅的捕獲異常詳解

 更新時(shí)間:2022年12月12日 10:33:01   作者:前端摸魚兒  
異常捕獲相信對(duì)大家來說并不陌生,下面這篇文章主要給大家介紹了關(guān)于ES7中await如何優(yōu)雅的捕獲異常的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

本篇文章介紹的是ES7await語法糖在調(diào)用的時(shí)候出現(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同時(shí)還能捕獲異常,那顯然是很完美的實(shí)現(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對(duì)象
 * @param { Object= } 附加的錯(cuò)誤
 * @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;

這段代碼很簡單,定義了一個(gè)函數(shù)to,傳入的參數(shù)兩個(gè):promise對(duì)象和附加信息。 返回一個(gè)promise。 如果promise沒有異常走的then方法,則返回一個(gè)nulldata組成的數(shù)組,否則返回錯(cuò)誤信息合并上傳入的附加信息undefined組成的數(shù)組。

測試用例

目錄src/await-to-js.test.ts

測試用例分別測試了沒有異常的單值,有異常的單值,傳入了附加信息的異常,沒有異常的對(duì)象。

結(jié)束語

看到如此優(yōu)雅的能在一行實(shí)現(xiàn)了異步編程還能返回其錯(cuò)誤對(duì)象,比try..catch優(yōu)雅很多。我們開發(fā)盡量讓自己的代碼如藝術(shù)一樣優(yōu)雅。不僅能賞心悅目,還能易于維護(hù)。我們也能成為編程界的藝術(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ù)方式

    今天小編就為大家分享一篇layui table表格數(shù)據(jù)的新增,修改,刪除,查詢,雙擊獲取行數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • 小程序?qū)崿F(xiàn)長按保存圖片的方法

    小程序?qū)崿F(xiàn)長按保存圖片的方法

    這篇文章主要介紹了小程序?qū)崿F(xiàn)長按保存圖片的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 一文解析JavaScript模塊構(gòu)建的三種方式

    一文解析JavaScript模塊構(gòu)建的三種方式

    在現(xiàn)代Web開發(fā)中,JavaScript庫的構(gòu)建和打包是一個(gè)至關(guān)重要的環(huán)節(jié),不同的構(gòu)建方式可以影響到庫的性能、可維護(hù)性和適用性,本文將深入剖析三種主要的JavaScript模塊構(gòu)建方式:CommonJS、ES模塊和AMD,我們將深入探討它們的工作原理、適用場景以及示例代碼
    2023-08-08
  • JS實(shí)現(xiàn)隨機(jī)點(diǎn)名器

    JS實(shí)現(xiàn)隨機(jī)點(diǎn)名器

    這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)隨機(jī)點(diǎn)名器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • JavaScript中的await函數(shù)使用小結(jié)

    JavaScript中的await函數(shù)使用小結(jié)

    async 函數(shù)是 AsyncFunction 構(gòu)造函數(shù)的實(shí)例,并且其中允許使用 await 關(guān)鍵字,async 和 await 關(guān)鍵字讓我們可以用一種更簡潔的方式寫出基于 Promise 的異步行為,而無需刻意地鏈?zhǔn)秸{(diào)用 promise,這篇文章主要介紹了JavaScript中的await,需要的朋友可以參考下
    2024-01-01
  • 利用js實(shí)現(xiàn)簡易紅綠燈

    利用js實(shí)現(xiàn)簡易紅綠燈

    這篇文章主要介紹了利用js實(shí)現(xiàn)簡易紅綠燈,幫助大家更好的利用js制作特效,美化網(wǎng)頁,感興趣的朋友可以了解下
    2020-10-10
  • js自定義select下拉框美化特效

    js自定義select下拉框美化特效

    這篇文章主要為大家介紹了javascript自定義select下拉框美化特效的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • js實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲

    js實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • javascript 使用for循環(huán)時(shí)該注意的問題-附問題總結(jié)

    javascript 使用for循環(huán)時(shí)該注意的問題-附問題總結(jié)

    所謂for循環(huán)就是重復(fù)的執(zhí)行一段代碼,for循環(huán)也是希望在創(chuàng)建循環(huán)時(shí)常會(huì)用到的工具,這篇內(nèi)容主要給大家介紹javascript 使用for循環(huán)時(shí)該注意的問題-附問題總結(jié),需要的朋友可以參考下
    2015-08-08
  • js數(shù)字轉(zhuǎn)換為float,取N位小數(shù)

    js數(shù)字轉(zhuǎn)換為float,取N位小數(shù)

    在javascript中不分單精度float和雙精度double,凡事有小數(shù)的變量都認(rèn)為是float,因此要取小數(shù)后的n位,要用方法toFixed(n)來得到
    2014-02-02

最新評(píng)論

永川市| 东源县| 五常市| 山东省| 江津市| 宁蒗| 信丰县| 克东县| 井研县| 浑源县| 鞍山市| 周宁县| 上高县| 田阳县| 永安市| 广东省| 边坝县| 昆山市| 灵丘县| 商南县| 岳池县| 雷山县| 鄂州市| 聊城市| 额济纳旗| 枣阳市| 陆川县| 颍上县| 九龙坡区| 正阳县| 高尔夫| 惠水县| 平原县| 玛多县| 大渡口区| 穆棱市| 应用必备| 桑日县| 榆树市| 子洲县| 繁峙县|