节点在asynchronous函数完成之前退出

我有一个函数返回一个承诺,我试图从一个asynchronous函数中等待它。 问题是程序立即完成,而不是等待承诺。

asynchronoustest.js:

function doItSlow() { const deferred = new Promise(); setTimeout( () => { console.log( "resolving" ); deferred.resolve(); }, 1000 ); return deferred; } async function waitForIt( done ) { console.log( "awaiting" ); await doItSlow(); console.log( "awaited" ); done(); } waitForIt(() => { console.log( "completed test" ); }); console.log( "passed by the test" ); 

构build并运行:

 babel --stage 0 --optional runtime async-test.js > at.js && node at.js` 

结果:

 awaiting passed by the test 

立即解决,而不是等待一秒钟没有影响:

 function doItSlow() { const deferred = new Promise(); console.log( "resolving" ); deferred.resolve(); return deferred; } 

有趣的是,“解决”从来不会被打印,即使它现在是同步的:

 awaiting passed by the test 

我会怀疑编译器的问题,但我检查了Babel的输出,果然,它编译了同步版本。

我以为我可以等待一个asynchronous函数的承诺。 有什么我在这里失踪?

您没有使用Promise (假设它符合标准)。 它没有resolve方法。 你应该传递一个函数:

 function doItSlow() { return new Promise(resolve => { setTimeout( () => { console.log( "resolving" ); resolve(); }, 1000 ); }); }