【发布时间】:2017-06-20 14:59:13
【问题描述】:
在我的服务中,我尝试解决下一个问题。我有一个包含其他 json 文件(卡片)名称的 json 文件:
{
"filename1" : ... ,
"filename2" : ... ,
...
"filenameN" : ...
}
我需要加载所有这些文件。 “filenameX”文件有一些卡片数据:
{
dataX
}
我需要在对象中合并加载的数据:
{
"filename1" : { data1 },
"filename2" : { data2 },
...
"filenameN" : { dataN }
}
我为任何文件加载创建观察者,并尝试将它们组合成一个高级单个观察者,当所有相应的观察者都存在时,该观察者被解析。这是我的代码:
import { Observable } from "rxjs/Observable";
import "rxjs/add/observable/concat";
import "rxjs/add/operator/map";
...
_loadCards(dir, cardsListFile) {
var http = ...
var url = ...
return Observable.create(function (observer) {
http.get(url + dir + "/" + cardsListFile + ".json").map(res => { return res.json(); }).subscribe(list => {
let data = {};
let observers = [];
for(var card in list) {
if(list.hasOwnProperty(card)) {
let obs = http.get(url + dir + "/cards/" + card + ".json").map(res => { return res.json(); });
observers.push(obs);
let getData = function(card) {
obs.subscribe(cardData => {
data[card] = cardData;
});
};
getData(card);
}
}
let concatResult = Observable.concat(observers);
console.log(concatResult);
concatResult.subscribe(result => {
observer.onNext(data);
observer.onCompleted();
});
});
});
};
但是,Observer 的 concat 运算符并不能像描述的那样工作 - 它返回相同的 Observers 数组作为其输入。问题出在哪里,我可以使用哪些其他运算符来使我的解决方案更直接(因为现在它肯定很难看)?
【问题讨论】:
标签: angular typescript rxjs observable rxjs5