摘要:本文討論地址閱讀時間大概分鐘和有很多容易被忽視的不同之處。首先定義一個異步函數(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、return 和 return 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 callingasync function foo() { try { waitAndMaybeReject(); } catch (e) { return "caught"; } }
直接調(diào)用 foo,函數(shù)總是返回 Promise fulfill with undefined, without waiting。
永遠不會返回 "yay"。
2 Awaitingasync 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 Returningasync 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-awaitingasync 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
摘要:控制臺將顯示回調(diào)地獄通常,回調(diào)只能由一個異步函數(shù)調(diào)用。更多資源使更友好規(guī)范使用異步函數(shù)簡化異步編碼旅程異步編程是一項在中無法避免的挑戰(zhàn)。 JavaScript經(jīng)常聲稱是_異步_。那是什么意思?它如何影響發(fā)展?近年來這種方法有何變化? 請思考以下代碼: result1 = doSomething1(); result2 = doSomething2(result1); 大多數(shù)語言都處理每...
摘要:控制臺將顯示回調(diào)地獄通常,回調(diào)只能由一個異步函數(shù)調(diào)用。更多資源使更友好規(guī)范使用異步函數(shù)簡化異步編碼旅程異步編程是一項在中無法避免的挑戰(zhàn)。 JavaScript經(jīng)常聲稱是_異步_。那是什么意思?它如何影響發(fā)展?近年來這種方法有何變化? 請思考以下代碼: result1 = doSomething1(); result2 = doSomething2(result1); 大多數(shù)語言都處理每...
摘要:控制臺將顯示回調(diào)地獄通常,回調(diào)只能由一個異步函數(shù)調(diào)用。更多資源使更友好規(guī)范使用異步函數(shù)簡化異步編碼旅程異步編程是一項在中無法避免的挑戰(zhàn)。 JavaScript經(jīng)常聲稱是_異步_。那是什么意思?它如何影響發(fā)展?近年來這種方法有何變化? 請思考以下代碼: result1 = doSomething1(); result2 = doSomething2(result1); 大多數(shù)語言都處理每...
閱讀 2337·2023-04-26 00:28
閱讀 3085·2019-08-30 15:55
閱讀 2755·2019-08-30 12:47
閱讀 1567·2019-08-29 11:04
閱讀 3197·2019-08-28 18:14
閱讀 957·2019-08-28 18:11
閱讀 1683·2019-08-26 18:36
閱讀 3401·2019-08-23 18:21