Заметный.аргумент forkJoin и массива
в документации 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();
});
});
}
корень моего вопроса связан с циклом to конец, прежде чем продолжить, как спрашивается здесь: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()
}
1 ответов
необходимо импортировать операторы, которые не загружены по умолчанию. Вот что!--3--> обычно означает. Вы можете импортировать все операторы, добавив complete rxjs
к вашему бутстрапу, например:
import 'rxjs/Rx'
или путем импорта определенных операторов, в вашем случае:
import 'rxjs/add/observable/forkJoin'
еще одно замечание / предложение о вашем коде: попробуйте придерживаться одного синтаксиса. Вы смешиваете es5, es6, typescript... и пока он работает, он только запутает вас в долгосрочной перспективе. Кроме того, если вы только начинаете с наблюдаемых, старайтесь избегать 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 v5 и ссылка, которую вы предоставили, предназначена для RxJS v4. Документы по-прежнему являются неполными для v5, но вы можете найти описания во многих исходных файлах.