RxJS在事件上发送多个唯一的ajax请求

时间:2014-07-18 03:16:03

标签: javascript ajax events rxjs reactive-extensions-js

如果我有事件类型;说一个点击事件。我要激发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;
});

1 个答案:

答案 0 :(得分:4)

您可以使用zip来同步您的请求。 zip将导致所有可观察对象被订阅,并且每次所有这些可观察对象都会被激活。因此,一旦来自每个observable的n项产生,zip将产生它的n值,该值是使用原始可观察量中的n值创建的。

完成后,您可以使用适用于switchLatest的{​​{1}},并确保它始终订阅最新的observable。因此,如果您选择新用户,则只需取消订阅任何待处理请求,然后订阅下一个请求。

Observable<Observable<T>>