Joh*_*ith 1 javascript asynchronous node.js async-await ecmascript-6
有没有办法让javascript await关键字在async函数外部工作?我希望能够冻结整个调用堆栈(而不仅仅是async函数的其余部分),一旦特定的promise返回一个值就恢复.可悲的是,await像这样强大的人目前已被扼杀或尚未实施.我试图使nodent.js工作,但由于我的自定义加载器和动态函数,它不幸是不切实际的.
有没有办法让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 运行并等待已停止的进程自行恢复具有相同的效果.