我有一系列项目要按顺序POST到服务器:
hh
为了达到这个目的,我将const items = ["a", "b", "c"];
与Angular的concatMap
一起使用。但是,我并不想直接在HttpService
中使用HttpService
来电,而是使用第三个concatMap
:
Subject
我的问题:只发送了第一个项目。我可以看到它完成(记录“完成发送”),但之后从未调用{b}为{b}。我确实得到了“完成所有项目”。
但是,如果我sendItem(item: Item): Subject<boolean> {
const result$ = new Subject();
console.log(`Sending ${item}`);
this.http.post('http://...', item)
.subscribe(() => {
// do stuff
console.log(`Done sending ${item}`);
result$.next()
});
return result$;
}
sendItems() {
Observable.from(items)
.concatMap(item => this.sendItem(item))
.subscribe(() => console.log('Done with all items'););
}
中直接sendItem
:
http.post
我做错了什么?
答案 0 :(得分:1)
好的,我找到了解决方案:
concatMap在前一个完成后才订阅下一个observable(https://www.learnrxjs.io/operators/transformation/concatmap.html)
所以,如果我做result$.complete()
,一切正常。