第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JavaScript 中異步函數的一個奇怪的事情

JavaScript 中異步函數的一個奇怪的事情

寶慕林4294392 2024-01-18 10:11:35
$ cat x.jsasync function print() {    console.log("abc");}print();$ nodejs x.jsabc怎么會這樣?!print()返回一個Promise未等待的對象,是嗎?如果沒有等待,那為什么會被console.log執(zhí)行呢?
查看完整描述

2 回答

?
猛跑小豬

TA貢獻1858條經驗 獲得超8個贊

異步函數會返回一個 Promise,即使您沒有在代碼中定義 Promise。


我認為在等待語句中的所有承諾都得到解決后,這個返回的承諾就得到了履行。


我在下面的代碼中測試它,它還返回 Promise,只有在所有 Promise 解決后(在本例中為 3000 毫秒后)才會實現:


async function print2() {

? ?await console.log("abc")

? ? await new Promise((res, rej) => {

? ? ? ? setTimeout(() => {res(33)},3000)

? ? })

? ? await new Promise((res, rej) => {

? ? ? ? setTimeout(() => {res(33)},50)

? ? })

}


查看完整回答
反對 回復 2024-01-18
?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

您可以說一個空函數本身返回undefined(實際上不返回任何內容)。看看下面的示例;


function print() {}

var returnVal = print(); // undefined

你會注意到那returnVal是undefined.


現在,如果我們有一些東西在body那里test(),但你仍然沒有傳遞任何返回值,那么returnVal仍然會是undefined。


function print() {

? ? console.log('abc');

}

var returnVal = print(); // undefined

因此,為了讓函數有返回值,我們只需要return它即可。


function print() {

? ? console.log('abc');

? ? return 1;

}

var returnVal = print(); // 1

當您將其轉換為異步函數時。

  1. 異步函數的主體可以被認為是被零個或多個等待表達式分割。頂級代碼,直到并包括第一個等待表達式(如果有),都是同步運行的。這樣,沒有await表達式的異步函數將同步運行。但是,如果函數體內有await 表達式,則異步函數將始終異步完成。

  2. 每個await 表達式之后的代碼可以被認為存在于.then 回調中。通過這種方式,通過函數的每個可重入步驟逐步構建承諾鏈。返回值構成了鏈中的最后一個環(huán)節(jié)。

現在,根據上述信息,以下是我們所知道的與您的問題相關的信息;

  1. print()沒有返回任何東西,這應該是undefined

  2. async 函數將異步完成,這意味著它將始終返回Promise。待定、已履行拒絕

所以,在你的問題中說一下,這就是你的函數實際上所做的事情;

async function print() {

? ? console.log("abc"); // Prints 'abc'

}


// Function above is equivalent to;


function printEquivalentInNonAsync() {

? ? console.log("abc"); // Prints 'abc'

}


var returnVal = print(); // `returnVal` is `undefined`

并且,回答你的問題

如果沒有等待,那么為什么會執(zhí)行console.log?

無論等待異步函數,它仍然會執(zhí)行!-等待只是為了確保停止行執(zhí)行,直到異步函數(Promise)達到已完成已拒絕。請注意,Promise 的第一個狀態(tài)是pending


查看完整回答
反對 回復 2024-01-18
  • 2 回答
  • 0 關注
  • 171 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號