摘要:本文討論地址閱讀時間大概分鐘和有很多容易被忽視的不同之處。首先定義一個異步函數等待秒函數等待秒鐘,然后有一半的概率返回,一半的概率拋出異常。這個是最符合我們預期的寫法。
dev-reading/fe 是一個閱讀、導讀、速讀的 repo,不要依賴于 dev-reading/fe 學習知識。本 repo 只是一個快速了解文章內容的工具,并不提供全文解讀和翻譯。你可以通過本平臺快速了解文章里面的內容,找到感興趣的文章,然后去閱讀全文。
本文討論地址:https://github.com/dev-readin...
閱讀時間大概 2 分鐘
await、return 和 return await 有很多容易被忽視的不同之處。
首先定義一個異步函數:
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!"); } }
函數等待 1 秒鐘,然后有一半的概率返回 "yay",一半的概率拋出異常。
1 直接調用 Just callingasync function foo() { try { waitAndMaybeReject(); } catch (e) { return "caught"; } }
直接調用 foo,函數總是返回 Promise fulfill with undefined, without waiting。
永遠不會返回 "yay"。
2 Awaitingasync function foo() { try { await waitAndMaybeReject(); } catch (e) { return "caught"; } }
調用 foo,函數返回的 Promise 等待 1 秒,然后 fulfill with undefined, or fulfill with "caught"。
因為我們 await waitAndMaybeReject() 的結果,如果 rejected,我們的 catch 塊捕獲了異常,然后 "caught",如果 fulfilled,我們的函數并沒有返回 Promise 的值。
3 Returningasync function foo() { try { return waitAndMaybeReject(); } catch (e) { return "caught"; } }
調用 foo,函數返回的 Promise 等待 1 秒,然后 fulfill with "yay", or reject with Error("Boo!")。
4 Return-awaitingasync function foo() { try { return await waitAndMaybeReject(); } catch (e) { return "caught"; } }
調用 foo,函數返回的 Promise 等待 1 秒,然后 fulfill with "yay", or fulfill with "caught"。
這個是最符合我們預期的寫法。
我們可以把它拆分一下:
async function foo() { try { // 等待 waitAndMaybeReject() 函數的結果 // 把 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
如果你想參與討論,請點擊這里
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/92380.html
摘要:控制臺將顯示回調地獄通常,回調只能由一個異步函數調用。更多資源使更友好規范使用異步函數簡化異步編碼旅程異步編程是一項在中無法避免的挑戰。 JavaScript經常聲稱是_異步_。那是什么意思?它如何影響發展?近年來這種方法有何變化? 請思考以下代碼: result1 = doSomething1(); result2 = doSomething2(result1); 大多數語言都處理每...
摘要:控制臺將顯示回調地獄通常,回調只能由一個異步函數調用。更多資源使更友好規范使用異步函數簡化異步編碼旅程異步編程是一項在中無法避免的挑戰。 JavaScript經常聲稱是_異步_。那是什么意思?它如何影響發展?近年來這種方法有何變化? 請思考以下代碼: result1 = doSomething1(); result2 = doSomething2(result1); 大多數語言都處理每...
摘要:控制臺將顯示回調地獄通常,回調只能由一個異步函數調用。更多資源使更友好規范使用異步函數簡化異步編碼旅程異步編程是一項在中無法避免的挑戰。 JavaScript經常聲稱是_異步_。那是什么意思?它如何影響發展?近年來這種方法有何變化? 請思考以下代碼: result1 = doSomething1(); result2 = doSomething2(result1); 大多數語言都處理每...
閱讀 2323·2023-04-26 00:28
閱讀 3067·2019-08-30 15:55
閱讀 2742·2019-08-30 12:47
閱讀 1550·2019-08-29 11:04
閱讀 3150·2019-08-28 18:14
閱讀 945·2019-08-28 18:11
閱讀 1671·2019-08-26 18:36
閱讀 3383·2019-08-23 18:21