7

forkJoin で 6 つ以上のパラメーターを使用する必要があります。現在、別の関連する質問への回答に基づいて、6 つを超えるパラメーターを forkJoin に送信することはできないようです。

ただし、公式ドキュメントに基づいて、「 forkJoin は、配列として、または引数として直接渡すことができる、任意の数の Observable を取る演算子です」と述べています。

forkJoin - 公式ドキュメント

さて、私はそれを行っていますが、TS2322:Type 'foo' is not assignable to type 'bar[]' というエラーが表示されます。

私の調査では、異なる型を返す promise がある場合、引数をすべて同じ型に型キャストするため、引数を配列として送信しないことが最善であることもわかりました。-ソース

これが私のコードです。Typescript と Angular 4 の最新バージョンを使用しています。

ngOnInit() {
    this.spinner.show();
    Observable.forkJoin(
        this.loadParams(),              // Returns an Observable<Object>
        this.service.getPromiseType1(), // The rest return Observable<Array>
        this.service.getPromiseType2(),
        this.service.getPromiseType3(),
        this.service.getPromiseType4(),
        this.service.getPromiseType5(),
        this.service.getPromiseType6(),
    ).finally(() => this.spinner.hide())
        .subscribe(
            ([param, promise1, promise2, promise3, promise4, promise5, promise6]) => {
                this.job = job;
                this.value1 = promise1;
                this.value2 = promise2;
                this.value3 = promise3;
                this.value4 = promise4;
                this.value5 = promise5;
                this.value6 = promise6;
            }, (error) => {errorHandlingFunction}
   });

単一のパラメーターを削除して、6 つのパラメーターを forkJoin に渡すと、正常に機能します。だから私の質問は、オブジェクトオブザーバブルとそれに続く配列オブザーバブルをすべて1回の呼び出しでロードしたい場合、これを行う別の方法はありますか? 公式ドキュメントには、任意の数の Observable を受け入れることができるはずであると記載されているため、これは forkJoin のバグですか?

Observable 型の Array を作成し、forkJoin 内で array.forEach() を使用しようとしましたが、型 void を返すことについて不平を言います。とにかく、それはそれを行うためのぎくしゃくした方法のように思えました。

4

5 に答える 5