すみません教えてください。
ある関数内で同期処理を行いその処理の結果によって関数を終了させたいのですがなかなか実装できず困ってます...。
処理配下です。
typescrypt
1export class AppComponent { 2 async ngOnInit() { 3 console.log('処理開始 ---------------------------'); 4 await this.main(); 5 console.log('処理終了 ---------------------------'); 6 } 7 8 async main() { 9 // 処理1 10 console.log('1つ目の処理'); 11 // 処理2 12 await new Promise((resolve) => { 13 setTimeout(() => { 14 console.log('2つ目の処理'); 15 const popup = true; 16 if (popup) { 17 resolve(''); 18 return; 19 } 20 resolve(''); 21 }, 500); 22 }); 23 // 処理3 24 console.log('3つ目の処理 ← 2がtrueなので本当は処理されてほしくない '); 25 } 26}
実行結果
// 処理開始 --------------------------- // 1つ目の処理 // 2つ目の処理 // 3つ目の処理 ← 2がtrueなので本当は処理されてほしくない // 処理終了 ---------------------------
上記の場合、3つの処理が上から同期実行され2つ目の処理でmain()関数を抜けて元のngOnInit()処理へ戻って欲しいです。
このプログラムだとどうしても3つ目の処理が走ってしまうことと、2つ目の処理のif内でresolve('')を返さないと永久にpendingになってしまい後続が走りません。
[求める実行結果]
typescrypt
1// 処理開始 --------------------------- 2// 1つ目の処理 3// 2つ目の処理 4// 処理終了 ---------------------------
Callbackや即時関数使ってもなかなかうまい具合に処理できません。
大変申し訳ございませんがどなたかご教示くださいませ。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。