gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 10:14:14 25 4
gpt4 key购买 nike

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

最佳答案

您可以使用 zip同步您的请求。 zip将导致所有可观察对象被订阅,并在每次所有这些可观察对象触发时产生。所以,一旦 n每个 observable 的第一个项目被生成,zip 将生成它的 n th 值,它是使用 n 创建的来自原始可观察量的 th 个值。

有了它之后,您可以使用 switchLatest 吗? , 适用于 Observable<Observable<T>> ,并确保它始终订阅最新的可观察对象。因此,如果您选择一个新用户,它只会取消订阅任何待处理的请求,然后订阅下一个请求。

$rootScope.$eventToObservable('selectUser')
.throttle(500)
.map(data => {
return angular.copy(data.additionalArguments[0].entity);
})
.map(entityToExpandedData).switchLatest()
.subscribe(model => {
$scope.model = model;
});

function entityToExpandedData (entity) {
return Rx.Observable
.zip(
MemberService.getMember(d.ID),
MemberService.dataOtherData(d.ID),
MemberService.getNotes(d.ID),
MemberService.getLog(d.ID),
makeExpandedData
);
}

function makeExpandedData (member, otherData, notes, log) {
return {
member: member,
otherData: otherData,
notes: notes,
log: log
};
}

关于javascript - RxJS 在事件上发送多个唯一的 ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24816691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com