Ben*_*ren 39 fork-join observable angular
在Observables forkJoin文档中,它说args可以是一个数组,但它没有列出这样做的例子:
https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/forkjoin.md
我尝试过类似于我列出的功能(如下所示)但是想出了一个错误:
:3000/angular2/src/platform/browser/browser_adapter.js:76
EXCEPTION: TypeError: Observable_1.Observable.forkJoin is not a function
Run Code Online (Sandbox Code Playgroud)
我的功能的剪切版本如下:
processStuff( inputObject ) {
let _self = this;
return new Observable(function(observer) {
let observableBatch = [];
inputObject.forEach(function(componentarray, key) {
observableBatch.push(_self.http.get(key + '.json').map((res: Response) => res.json()));
});
Observable.forkJoin(
observableBatch
// );
).subscribe(() => {
observer.next();
observer.complete();
});
});
}
Run Code Online (Sandbox Code Playgroud)
我的问题的根与循环结束有关,然后按此处的要求继续:Angular2 Observable - 如何在循环之前等待循环中的所有函数调用结束?
但我还没有完全掌握forkJoin与数组的正确用法以及正确的语法.
我非常感谢您提供的帮助.
thirdFunction() {
let _self = this;
return Observable.create((observer) => {
// return new Observable(function(observer) {
...
observer.next(responseargs);
observer.complete();
});
}
processStuff(inputObject) {
let _self = this;
let observableBatch = [];
inputObject.forEach((componentarray, key) => {
observableBatch.push(_self.thirdFunction().map((res: Response) => res.json()));
});
return Observable.forkJoin(observableBatch);
}
elsewhere() {
this.processStuff(inputObject)
.subscribe()
}
Run Code Online (Sandbox Code Playgroud)
Sas*_*sxa 75
您需要导入默认情况下未加载的运算符.这EXCEPTION Observable.xxxx is not a function通常意味着什么.您可以通过向rxjs引导程序添加complete 来导入所有运算符,例如:
import 'rxjs/Rx'
Run Code Online (Sandbox Code Playgroud)
或者通过导入特定的运算符,在您的情况下:
import 'rxjs/add/observable/forkJoin'
Run Code Online (Sandbox Code Playgroud)
关于您的代码的另一个观察/建议:尝试坚持使用一种语法.你正在混合使用es5,es6,打字稿等......当它正在运行时,它只会让你长期迷惑.此外,如果您刚开始使用Observables,请尝试避免new Observable()使用创建运算符;
processStuff( inputObject ) {
let observableBatch = [];
inputObject.forEach(( componentarray, key ) => {
observableBatch.push( this.http.get( key + '.json').map((res: Response) => res.json()) );
});
return Observable.forkJoin(observableBatch);
}
elsewhere() {
this.processStuff( inputObject )
.subscribe()
}
Run Code Online (Sandbox Code Playgroud)
最后,请参阅正确的文档 - Angular2使用RxJS v5,您提供的链接用于RxJS v4.对于v5,文档仍然不完整,但您可以在许多源文件中找到说明.
| 归档时间: |
|
| 查看次数: |
59444 次 |
| 最近记录: |