Angular Observable.forkJoin和数组参数
在Observables forkJoin文档中,它说args可以是数组,但没有列出这样做的示例: 我尝试了一个类似于我在下面列出的函数,但出现了一个错误:Angular Observable.forkJoin和数组参数,angular,observable,fork-join,Angular,Observable,Fork Join,在Observables forkJoin文档中,它说args可以是数组,但没有列出这样做的示例: 我尝试了一个类似于我在下面列出的函数,但出现了一个错误: :3000/angular2/src/platform/browser/browser_adapter.js:76 EXCEPTION: TypeError: Observable_1.Observable.forkJoin is not a function 下面是我的函数的剪切版本: processStuff( inputObj
: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();
});
});
}
我的问题的根源与继续之前的循环有关,如下所述:
但是我还没有完全掌握forkJoin在数组中的正确用法和正确语法
我非常感谢你能提供的帮助
注:第三个函数的示例,返回一个可观察的
您需要导入默认情况下未加载的运算符。这就是异常可观察性的含义。xxxx不是一个函数。您可以通过将complete
rxjs
添加到引导程序来导入所有运算符,例如:
import 'rxjs/Rx'
或通过导入特定运算符,在您的情况下:
import 'rxjs/add/observable/forkJoin'
关于代码的另一个观察/建议是:尝试使用一种语法。您正在混合es5、es6和打字脚本。。。而当它工作时,从长远来看,它只会让你感到困惑。此外,如果您刚开始使用Observable,请尽量避免使用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()
}
最后,请参阅正确的文档-Angular2使用了RxJS v4,您提供的链接也适用于RxJS v4。v5的文档仍然不完整,但您可以在许多源文件中找到描述。
Observable.forkJoin([http.get(),http.get(),http.get(),http.get()等])。订阅((res)=>…)
另请参见您是否忘记了导入“rxjs/add/Observable/forkJoin”或导入“rxjs/Rx”
?我刚刚有了这个导入{Observable}来自“rxjs/可观察”;请看,其他运算符/生成器也是如此..Hi@Sasxa我遇到了问题,因为我使用的是第三个函数,而不是这个.http.get(…您能提供一个例子,说明第三个函数返回新的可观察函数(函数(观察者))吗{我已经编辑了我的原始帖子来展示一个示例。非常感谢您的帮助。解决了它-第三个函数需要这个:returnobservable.create((observer)=>{…observator.next(“test”);observator.complete();我喜欢这个解决方案。我不知道的是,当大多数请求成功时,如何处理一些请求上的错误?我上一个版本应该是“return-forkJoin(observebatch)”而不是“return-observeable.forkJoin(observebatch)”@Volodymyr答案是与angular 7+兼容的答案,导入是import{-forkJoin}来自“rxjs”;
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()
}