gpt4 book ai didi

javascript - 当 await 挂起异步函数时会发生什么?

转载 作者:行者123 更新时间:2023-11-30 13:59:03 26 4
gpt4 key购买 nike

main(){
PrintLotsOfStuff();
GoShopping();
HaveAGoodDay();

}

PrintLotsOfStuff(){
printDailyNewsDigest();
printWinningLotteryNumbers();
printWeatherForecast();
printBaseballScore();
}

async printDailyNewsDigest() {
var newsDigest = await gatherNewsReports();
print (newsDigest);
}

gathernewsReports() {}

如果我们查看 https://dart.dev/tutorials/language/futures ,我们可以看到 gatherNewsReport() 和 print(newsDigest) 在调用异步函数的函数中的所有函数之后运行。

但是,在我上面概述的情况中,还有一个层次。在那种情况下,流程看起来如何?

首先 PrintLotsOfStuff() 调用 printDailyNewsDigest(),后者调用 gatherNewsReports(),然后挂起,将控制权交还给 printLotsOfStuff().

然后运行 ​​printWinningLotteryNumbers、printWeatherForecast 和 printBaseballScore。如果 await 仍未返回,接下来会发生什么?

是否返回上层,然后运行GoShopping()HaveAGoodDay()

最佳答案

First PrintLotsOfStuff() calls printDailyNewsDigest(), which calls gatherNewsReports, which then suspends, passing control back to printLotsOfStuff().

没错。换句话说:printDailyNewsDigest() 同步执行,直到它到达第一个 await,然后函数让出它的执行并且函数调用评估为一个 Promise(因此返回一个 Promise到调用它的函数)。由于 PrintLotsOfStuff() 忽略了该 promise ,执行将从那时起同步继续。

This then runs printWinningLotteryNumbers, printWeatherForecast, and printBaseballScore. What happens next if the await still hasn't returned?

同步执行不能被中断。 printDailyDiggest 显然还没有继续执行。

Does it return to the upper level and then run GoShopping() and HaveAGoodDay()?

当然可以。

现在,如果完成了,调用堆栈为空,引擎就有时间执行下一个任务。现在某个时候 printDailyDiggest 等待完成,printDailyDiggest 将继续执行

关于javascript - 当 await 挂起异步函数时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56700171/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com