-2

次々に実行したい Observables を返す 2 つの関数があります。 function1リターン

Observable<SomeDataObject> 

関数2の戻り値の型

Observable<Any>

それらを実行する関数がfunction1の結果に基づいてブール値を返すことを望み ます。最初にfunction1を実行したときになんとか実行できましたが、今は function2 を最初に実行したいので、エラーが発生します。

"Argument of type '(res: <SomeDataObject>) => boolean' is not assignable to 
 parameter of type '(value:SomeDataObject, index: number) => 
ObservableInput<any>. Type 'boolean' is not assignable to type 
ObservableInput<SomeDataObject>

私のコードを参照してください:これは動作します:

return this.someService.function1().pipe(
  switchMap(f1Result => 
  {
     this.someService.repositpry.f1ResultData = f1Result;
     return this.someService.function2().pipe(
        map(res => 
       {
           if (res) return true;
           else return false;
       }));
   })
 ) 

これは失敗します:

 return this.someService.function2.pipe( 
  switchMap(f2Result => 
  {
      this.someService.function1().pipe(
       map(f1result => 
       {
           this.someService.repositpry.f1ResultData = f1Result;
       })
    );
    if (f2Result) return true
    else return false;
 }));

解決:

return this.someService.function2().pipe( 
  switchMap(f2Result => 
  {
      return this.someService.function1().pipe(
       map((f1result) => 
       {
           this.someService.repositpry.f1ResultData = f1Result;
           if (f2Result) return true
           else return false;
       })
    );

 }));
4

3 に答える 3

1

こんにちは、これを行うには concatMap オペレーターが必要です。

return this.someService.function1().pipe(
  concatMap(f1Result => 
  {
     this.someService.repositpry.f1ResultData = f1Result;
     return this.someService.function2.pipe(
        map(res => 
       {
           if (res) return true;
           else return false;
       }));
   })
 ) 
于 2020-03-04T10:23:34.067 に答える