使用等待异步外部

Joh*_*ith 1 javascript asynchronous node.js async-await ecmascript-6

有没有办法让javascript await关键字在async函数外部工作?我希望能够冻结整个调用堆栈(而不仅仅是async函数的其余部分),一旦特定的promise返回一个值就恢复.可悲的是,await像这样强大的人目前已被扼杀或尚未实施.我试图使nodent.js工作,但由于我的自定义加载器和动态函数,它不幸是不切实际的.

rsp*_*rsp 5

有没有办法让javascript await关键字在异步函数之外工作?

可悲的是,答案是:不.

查看文档:

await表达式导致异步函数执行暂停,等待Promise的解析,并在解析值时恢复异步函数执行.[强调补充]

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await

我希望能够冻结整个调用堆栈(而不仅仅是异步函数的其余部分),一旦特定的promise返回一个值就恢复.

但是如果整个调用堆栈被冻结,你的承诺怎么能返回一个值呢?它将永远被卡住.

更多细节

要使用await你需要在里面async function.

至少你必须这样做:

async function main() {
  // use await here
}
main();
Run Code Online (Sandbox Code Playgroud)

在你的主要代码中.

或者,使用IIFE - 感谢Robert Klep提出的建议:

void async function main() {
    // use await here
}();
Run Code Online (Sandbox Code Playgroud)

或者,如果你喜欢标点符号:

(async () => {
    // use await here
})();
Run Code Online (Sandbox Code Playgroud)

其他选择

在Node中还有其他一些处理并发的选项,例如:

但是,没有一个会冻结调用堆栈,因为它kill -STOP与使用您自己的进程ID 运行并等待已停止的进程自行恢复具有相同的效果.