成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

await、return 和 return await 的陷阱

qujian / 2474人閱讀

摘要:本文討論地址閱讀時間大概分鐘和有很多容易被忽視的不同之處。首先定義一個異步函數(shù)等待秒函數(shù)等待秒鐘,然后有一半的概率返回,一半的概率拋出異常。這個是最符合我們預(yù)期的寫法。

dev-reading/fe 是一個閱讀、導(dǎo)讀、速讀的 repo,不要依賴于 dev-reading/fe 學(xué)習(xí)知識。本 repo 只是一個快速了解文章內(nèi)容的工具,并不提供全文解讀和翻譯。你可以通過本平臺快速了解文章里面的內(nèi)容,找到感興趣的文章,然后去閱讀全文。

本文討論地址:https://github.com/dev-readin...

閱讀時間大概 2 分鐘

await、returnreturn await 有很多容易被忽視的不同之處。

首先定義一個異步函數(shù):

async function waitAndMaybeReject() {
  // 等待1秒
  await new Promise(r => setTimeout(r, 1000));

  const isHeads = Boolean(Math.round(Math.random()));

  if (isHeads) {
    return "yay";
  } else {
    throw Error("Boo!");
  }
}

函數(shù)等待 1 秒鐘,然后有一半的概率返回 "yay",一半的概率拋出異常。

1 直接調(diào)用 Just calling
async function foo() {
  try {
    waitAndMaybeReject();
  }
  catch (e) {
    return "caught";
  }
}

直接調(diào)用 foo,函數(shù)總是返回 Promise fulfill with undefined, without waiting。

永遠不會返回 "yay"。

2 Awaiting
async function foo() {
  try {
    await waitAndMaybeReject();
  }
  catch (e) {
    return "caught";
  }
}

調(diào)用 foo,函數(shù)返回的 Promise 等待 1 秒,然后 fulfill with undefined, or fulfill with "caught"。

因為我們 await waitAndMaybeReject() 的結(jié)果,如果 rejected,我們的 catch 塊捕獲了異常,然后 "caught",如果 fulfilled,我們的函數(shù)并沒有返回 Promise 的值。

3 Returning
async function foo() {
  try {
    return waitAndMaybeReject();
  }
  catch (e) {
    return "caught";
  }
}

調(diào)用 foo,函數(shù)返回的 Promise 等待 1 秒,然后 fulfill with "yay", or reject with Error("Boo!")

4 Return-awaiting
async function foo() {
  try {
    return await waitAndMaybeReject();
  }
  catch (e) {
    return "caught";
  }
}

調(diào)用 foo,函數(shù)返回的 Promise 等待 1 秒,然后 fulfill with "yay", or fulfill with "caught"。

這個是最符合我們預(yù)期的寫法。

我們可以把它拆分一下:

async function foo() {
  try {
    // 等待 waitAndMaybeReject() 函數(shù)的結(jié)果
    // 把 fulfilled value 賦值給 fulfilledValue:
    const fulfilledValue = await waitAndMaybeReject();
    // 如果 waitAndMaybeReject() 失敗,拋出異常:
    return fulfilledValue;
  }
  catch (e) {
    return "caught";
  }
}

閱讀原文:await vs return vs return await

討論地址:await、return 和 return await 的陷阱 #12

如果你想?yún)⑴c討論,請點擊這里

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/92380.html

相關(guān)文章

  • js 異步編程

    摘要:總結(jié)這篇文章簡單的介紹了一些常用的異步編程的方法,如果有錯誤或不嚴(yán)謹?shù)牡胤?,歡迎批評指正,如果喜歡,歡迎點贊收藏。 大家都知道js的執(zhí)行環(huán)境是單線程的,如果沒有異步編程,那么js的執(zhí)行效率會非常低下,導(dǎo)致程序十分卡頓,一提到異步編程大家首先的想到的一定是回調(diào)函數(shù),這也是最常用的異步編程的形式,但其實常用的還有Promise和Async函數(shù),接下來就讓我們一起學(xué)習(xí)這幾種常用的異步編程方法...

    diabloneo 評論0 收藏0
  • 現(xiàn)代JS中流程控制:詳解Callbacks 、Promises 、Async/Await

    摘要:控制臺將顯示回調(diào)地獄通常,回調(diào)只能由一個異步函數(shù)調(diào)用。更多資源使更友好規(guī)范使用異步函數(shù)簡化異步編碼旅程異步編程是一項在中無法避免的挑戰(zhàn)。 JavaScript經(jīng)常聲稱是_異步_。那是什么意思?它如何影響發(fā)展?近年來這種方法有何變化? 請思考以下代碼: result1 = doSomething1(); result2 = doSomething2(result1); 大多數(shù)語言都處理每...

    shadowbook 評論0 收藏0
  • 現(xiàn)代JS中流程控制:詳解Callbacks 、Promises 、Async/Await

    摘要:控制臺將顯示回調(diào)地獄通常,回調(diào)只能由一個異步函數(shù)調(diào)用。更多資源使更友好規(guī)范使用異步函數(shù)簡化異步編碼旅程異步編程是一項在中無法避免的挑戰(zhàn)。 JavaScript經(jīng)常聲稱是_異步_。那是什么意思?它如何影響發(fā)展?近年來這種方法有何變化? 請思考以下代碼: result1 = doSomething1(); result2 = doSomething2(result1); 大多數(shù)語言都處理每...

    oujie 評論0 收藏0
  • 現(xiàn)代JS中流程控制:詳解Callbacks 、Promises 、Async/Await

    摘要:控制臺將顯示回調(diào)地獄通常,回調(diào)只能由一個異步函數(shù)調(diào)用。更多資源使更友好規(guī)范使用異步函數(shù)簡化異步編碼旅程異步編程是一項在中無法避免的挑戰(zhàn)。 JavaScript經(jīng)常聲稱是_異步_。那是什么意思?它如何影響發(fā)展?近年來這種方法有何變化? 請思考以下代碼: result1 = doSomething1(); result2 = doSomething2(result1); 大多數(shù)語言都處理每...

    anquan 評論0 收藏0

發(fā)表評論

0條評論

qujian

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<