f2
後f1
が完了しました。 f1
関数は、同期または非同期です。両方のケースで機能する例が必要です。 Promise
とタイマーを使用して、解決策を見つけました。
global() {
this.f1().then(res => {
this.f2()
})
}
f1() {
return new Promise<any>((resolve, reject) => {
// Some code...
setTimeout( () => {
resolve(x);
}, 1500);
});
}
f2() {
// Some code...
}
問題は、プログラムが常に待機する必要があることです1500ms。 f2
前に開始f1
は終了しました。多かれ少なかれ、必要な時間を待つ方法はありますか?
したがって、setTimeout
部分を削除します。 resolve
またはreject
を呼び出し、次のthen
またはcatch
ハンドラーに実行を渡します。 Promiseに非同期呼び出しがある場合、その呼び出しの結果でresolve/reject
を呼び出す必要があります。
1500ms
を待たないことについてはどうですか-指定された時間は、実際には関数が呼び出されるまでの最低時間です。たぶん2000ms
の後これは、JSコードが動作するメインスレッドに関連しています。メインスレッドに実行する作業がない場合、非同期呼び出しの結果が実行されます。
function f1() {
return new Promise((resolve, reject) => {
console.log('f1');
resolve();
});
}
function f2() {
console.log('f2');
}
f1().then(res => f2());
f1
がsynchronousの場合、特別なことは何もありません。
global() {
f1();
f2();
}
f1
がasynchronousであり、Observableを返す場合、Rxjs operator
を使用します。 concatMap :
global() {
f1().concatMap(() => f2());
}
f1
がasynchronousでPromiseを返す場合、async/await
を使用します。
async global() {
await f1();
f2();
}
f1
がasynchronousであり、Promise(代替)を返す場合:
global() {
f1().then(res => f2());
}
タイムアウトを削除するだけです
function f1() {
return new Promise((resolve, reject) => {
console.log('i am first');
resolve();
});
}
function f2() {
console.log('i am second');
}
f1().then(f2);