実現したいこと
下記のようなコードを書いています。
関数checkTEST内で、
- subscribeで取得したデータを用いて(testData = res.body)
- if文で条件分岐し(if (testData))、値を返したい
のですが、subscribeで取得する前にif文が始まってしまいます(testDataがundefined)。
今の状態では同期処理ができていないのだと思うのですが、良いやり方はありますでしょうか。
該当のソースコード
typescript
1export class TestComponent implements OnInit { 2 3 load(){ 4 5 if(this.checkTEST(testID,testCount)){ 6 // 略 7 } 8 9 } 10 11 checkTEST(testID: number, testCount: number){ 12 let testData; 13 this.testService.countTest(testID).subscribe(res => { 14 // 1. subscribeで取得したデータを用いて(testData = res.body) 15 testData = res.body; 16 }); 17 18 // 2. if文で条件分岐し(if (testData))、値を返したい 19 if (testData) { 20 return Number(testData) < testCount; 21 } else { 22 return false; 23 } 24 } 25 26}
試したこと
https://teratail.com/questions/129464
上記が近いのではと思い下記のように修正してみましたが、やはり関数内でif文が先に動いてしまうようです。
また、関数checkTESTの戻り値に関して「'void' 型の式は、真実性をテストできません。」というエラーが出ます。
typescript
1export class TestComponent implements OnInit { 2 3 testData: Subject<number> = new Subject(); 4 5 load(){ 6 7 if(this.checkTEST(testID,testCount)){ 8 // 略 9 } 10 11 } 12 13 checkTEST(testID: number, testCount: number) { 14 this.counter(testID).subscribe(testData => { 15 if (testData) { 16 return Number(testData) > testCount; 17 } else { 18 return false; 19 } 20 }); 21 } 22 counter(testID: number){ 23 let testData; 24 this.testService.countTest(orgId).subscribe(res => { 25 testData = res.body; 26 this.testData.next(testData); 27 }); 28 return this.testData; 29 } 30 31}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/19 02:49