web-dev-qa-db-ja.com

エラーrxjs_Observable __。Observable.forkJoinは関数ではありませんか?

angualr-cliアプリケーションでRxjsを使用しています。

viewer.component.ts内

    //Other Imports
    import { Observable } from 'rxjs/Observable';
    //omitting for brevity
   export class ViewerComponent implements OnInit, AfterViewInit, OnDestroy {
    someFunction(someArg){
    //omitting for brevity
    let someArray: any = [];
    //Add some info
    Observable.forkJoin(someArray).subscribe(data => {
              //Do something with data
            });
    }
    //omitting for brevity
    }  

私は

ERROR TypeError: __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__.Observable.forkJoin is not a function
    at ViewerComponent.webpackJsonp../src/app/component/viewer.component.ts.ViewerComponent.someFunction(http://localhost:4200/main.bundle.js:4022:73)
    at http://localhost:4200/main.bundle.js:3951:31

しかし、Rxjsを完全に(import 'rxjs';)インポートすると、すべてが機能します。エラーなし。私は、何が必要なのかを理解しているようです。 rxjs/Observable/forkjoinもインポートしようとしましたが、何も役に立ちません。

これをどのように進めるかについてのポインタ。

12
Ankesh

here で説明したように、2つのオプションがあります。

  1. すべての演算子を単一のパッケージとしてインポートするか
  2. または、各演算子を個別にインポートします

最初の場合、次のようにインポートを使用します。

import Rx from 'rxjs/Rx';

Rx.Observable.forkJoin(1,2,3)

次のような2つ目:

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/forkJoin';

探しているのは2番目の選択肢だと思います。

あるプロジェクトでは、次のforkjoinコードを使用して画像をアップロードしましたが、完全に機能します。

/**
       *  Upload multiple image and then update the feature
       */
      public uploadImages(apiParams: any[], imageItems: any[]): Observable<any> {
        if (imageItems.length === 0) return;

        let promises = [];
        for (let imageItem of imageItems) {
          promises.Push(this.uploadImage(apiParams, imageItem));
        }
        return Observable.forkJoin(...promises);
      }

      /**
       * upload single image
       */
      public uploadImage(apiParams: any[], imageItem: any): any {
        let _formData = new FormData();
        _formData.append("UploadedImage", imageItem,  (new Guid()).toString()+'.png');
        const imageApiUrl = StringFormatter.format(imagePoints.create, apiParams);
        return Observable.fromPromise(
          fetch(imageApiUrl, {
            method: "POST",
            body: _formData
          })
          .then(result => result.json())
        );
      }
0
junlan