以下のコードには、outer
関数とinner
関数があります。 outer
はawait
inner
となっています。 inner
は、タイムアウト後に実行されるPromise
を返します。入れ子プロミスが実行されるのを待つ間に非同期関数が返されない
const outer = async() => {
let counter = 0;
const inner = async() => {
console.log('inner');
return new Promise((fulfill, reject) => {
if (++counter === 3) {
console.log('fulfill');
fulfill();
return;
}
setTimeout(() => inner(), 1000);
});
};
return await inner();
};
outer().then(() => console.log('outer done'));
outer
はいえ完了したことがない:私はこのPromise
が満たされた後outer
関数は右を返すことを期待しています。次のコードouter
完了で
inner
inner
inner
fulfill
:なしouter done
出力が存在しないことに注意してください。それはPromise
自身を返し、inner
機能はそれを満たし:
const outer = async() => {
return new Promise((fulfill, reject) => {
let counter = 0;
const inner = async() => {
console.log('inner');
if (++counter === 3) {
console.log('fulfill');
fulfill();
return;
}
setTimeout(() => inner(), 1000);
};
inner().catch(err => reject(err));
});
};
outer().then(() => console.log('outer done'));
は出力:
inner
inner
inner
fulfill
outer done
私は行動が両方のこれらの場合に類似しているべきであると考えました。誰でもその違いを見て説明することができますか?
をどのような場合には、 'fulfill'ログの存在を説明していますか?コードがその点に達することが証明されます。 –
@YuryFedorovあなたは最後の約束を果たしましたが、あなたが* 4つの新しい約束を作成したことを忘れないでください。ログは実際にそれが到達していないことを証明しています。なぜなら、1ではなく4つの線があるからです。 –
ああ、今、私はそれを見ています。いいね、ありがとう –