在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
剪切版本的我的功能如下:
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(); }); }); }
我的问题的根源是与循环结束,然后继续执行,如下所述:Angular2 Observable – how to wait for all function calls in a loop to end before proceeding?
但是我没有完全掌握正确使用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() }
您需要导入默认加载的操作符。这就是EXCEPTION Observable.xxxx通常不是一个功能。您可以通过将完整的rxj添加到引导程序中来导入所有运算符,例如:
原文链接:https://www.f2er.com/angularjs/144182.htmlimport 'rxjs/Rx'
或在您的情况下导入特定的操作符:
import 'rxjs/add/observable/forkJoin'
关于你的代码的另一个观察/建议:尝试坚持一个语法。你正在混合es5,es6,typescript …,而它的工作,只会混淆你从长远来看。此外,如果您刚刚从Observables开始,请尝试避免使用新的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() }
最后,请参阅正确的文档 – Angular2使用RxJS v5和您提供的链接是为RxJS v4。对于v5,文档仍然不完整,但您可以在许多源文件中找到描述。