最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

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

JavaScript 中異步函數(shù)的一個奇怪的事情

JavaScript 中異步函數(shù)的一個奇怪的事情

寶慕林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條經(jīng)驗 獲得超8個贊

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


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


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


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)

? ? })

}


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

TA貢獻1810條經(jīng)驗 獲得超4個贊

您可以說一個空函數(shù)本身返回undefined(實際上不返回任何內(nèi)容)??纯聪旅娴氖纠?;


function print() {}

var returnVal = print(); // undefined

你會注意到那returnVal是undefined.


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


function print() {

? ? console.log('abc');

}

var returnVal = print(); // undefined

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


function print() {

? ? console.log('abc');

? ? return 1;

}

var returnVal = print(); // 1

當(dāng)您將其轉(zhuǎn)換為異步函數(shù)時。

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

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

現(xiàn)在,根據(jù)上述信息,以下是我們所知道的與您的問題相關(guān)的信息;

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

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

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

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?

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


查看完整回答
反對 回復(fù) 2024-01-18
  • 2 回答
  • 0 關(guān)注
  • 188 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號