没有办法强制承诺同步解决?"/>
在 NodeJS 中,有没有办法强制承诺同步解决?
我知道,我知道 - 你不应该这样做。在这种情况下,重构超出了范围,并且在我所拥有的时间范围内不切实际或不可能。
我正在对一些依赖于同步块的现有遗留代码进行更改。
新代码依赖于 Promise 的解析,但手动追踪所有调用并将它们转换为异步对我来说是不切实际的。
代码不是性能关键,在应用程序启动时运行一次,有什么办法让我等待承诺同步解决?
像这样的傻事:
function foo() {
return new Promise(res => setTimeout(res, 1000))
}
function main() {
let done = false
foo().then(() => { done = true })
while (!done) continue
}
main()
回答如下:
有什么方法可以让我等待承诺同步解决吗?
没有。 (
while (!done) continue;
忙循环不会让其他任务运行,因此永远不会执行承诺执行程序代码。)
在应用程序启动时运行一次
然后,假设
function main()
是你实际的应用程序入口点,你不关心它的返回值,即
function main() {
console.log("I'm an application!");
}
main();
你可以做到
async function init() {
await newAsynchronousInit();
main();
}
init();
(或等效的
.then()
版本)因此异步 init 函数可以执行它的操作,然后继续执行 main 函数。
更多推荐
在 NodeJS 中,有没有办法强制承诺同步解决?
发布评论