promise を返す関数があり、非同期関数内からそれを待機しようとしています。問題は、プロミスを待つのではなく、プログラムがすぐに完了することです。
async-test.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" );
ビルドして実行:
babel --stage 0 --optional runtime async-test.js > at.js && node at.js`
結果:
awaiting
passed by the test
1 秒待つのではなく、すぐに解決しても効果はありません。
function doItSlow() {
const deferred = new Promise();
console.log( "resolving" );
deferred.resolve();
return deferred;
}
興味深いことに、「解決中」は、現在は同期されていますが、出力されません。
awaiting
passed by the test
コンパイラの問題が疑われますが、Babel の出力を確認したところ、確かに、同期バージョンがコンパイルされました。
非同期関数内からの約束を待つことができると思いました。私がここに欠けているものはありますか?