如果我有事件类型;说一个点击事件。我要激发3个唯一的ajax请求,但我想订阅所有3个请求的最终结果
此序列的正确设计模式是什么。
我当前的代码块看起来像这样
$rootScope.$eventToObservable('selectUser')
.throttle(500)
.map(data => {
return angular.copy(data.additionalArguments[0].entity);
})
.select(d => {
return {
Member: MemberService.getMember(d.ID),
otherData: MemberService.dataOtherData(d.ID),
Notes: MemberService.getNotes(d.ID),
Log: MemberService.getLog(d.ID)
}
})
.switchLatest() //Code current dies here with an object is not a function error. I believe because the return object is not an obserable. But not sure what the proper design pattern is.
.subscribe(model => {
//I would like that model would contain an object with the result of the 3 responses above.
$scope.model = model;
});
答案 0 :(得分:4)
您可以使用zip
来同步您的请求。 zip
将导致所有可观察对象被订阅,并且每次所有这些可观察对象都会被激活。因此,一旦来自每个observable的n
项产生,zip将产生它的n
值,该值是使用原始可观察量中的n
值创建的。
完成后,您可以使用适用于switchLatest
的{{1}},并确保它始终订阅最新的observable。因此,如果您选择新用户,则只需取消订阅任何待处理请求,然后订阅下一个请求。
Observable<Observable<T>>