错误 rxjs_Observable__.Observable.forkJoin 不是函数?
Error rxjs_Observable__.Observable.forkJoin is not a function?
我正在 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
但无济于事。
有关如何解决此问题的任何指示。
如here所述,您有两个选择:
- 将所有运算符作为一个包导入
- 或单独导入每个运算符
在第一种情况下,您将像这样使用导入:
import Rx from 'rxjs/Rx';
Rx.Observable.forkJoin(1,2,3)
第二个像这样:
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/forkJoin';
我相信你要找的是第二种选择。
在一个项目中,我使用了以下 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())
);
}
对于RxJS v6.5+
,现在是:
import { forkJoin } from 'rxjs';
https://www.learnrxjs.io/operators/combination/forkjoin.html
通过导入 forkJoin 而不是导入 Observable,将 forkJoin 运算符用作函数。
使用 forkJoin.subscribe() 代替 Observable.forkJoin.subscribe()
import { forkJoin } from 'rxjs/observable/forkJoin'
export class ViewerComponent implements OnInit, AfterViewInit, OnDestroy {
someFunction(someArg){
let someArray: any = [];
forkJoin(someArray).subscribe(data => {
});
}
}
源代码:https://github.com/ReactiveX/rxjs/blob/master/src/internal/observable/forkJoin.ts
我正在 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
但无济于事。
有关如何解决此问题的任何指示。
如here所述,您有两个选择:
- 将所有运算符作为一个包导入
- 或单独导入每个运算符
在第一种情况下,您将像这样使用导入:
import Rx from 'rxjs/Rx';
Rx.Observable.forkJoin(1,2,3)
第二个像这样:
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/forkJoin';
我相信你要找的是第二种选择。
在一个项目中,我使用了以下 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())
);
}
对于RxJS v6.5+
,现在是:
import { forkJoin } from 'rxjs';
https://www.learnrxjs.io/operators/combination/forkjoin.html
通过导入 forkJoin 而不是导入 Observable,将 forkJoin 运算符用作函数。
使用 forkJoin.subscribe() 代替 Observable.forkJoin.subscribe()
import { forkJoin } from 'rxjs/observable/forkJoin'
export class ViewerComponent implements OnInit, AfterViewInit, OnDestroy {
someFunction(someArg){
let someArray: any = [];
forkJoin(someArray).subscribe(data => {
});
}
}
源代码:https://github.com/ReactiveX/rxjs/blob/master/src/internal/observable/forkJoin.ts