gpt4 book ai didi

javascript - 使用 RxJs 将多个回调返回映射到 observable

转载 作者:行者123 更新时间:2023-11-28 04:18:46 25 4
gpt4 key购买 nike

我目前正在开始使用 RxJs 并尝试定义返回可观察值的模块。 (每个模块都充当黑匣子,仅公开其可观察值)。我的主要问题是由于我正在使用的第三方库:UWA:我的所有 dom 元素都是从 UWA 对象生成的,并触发 UWA“事件”。顺便说一句,我想将这些自定义事件映射到可观察对象。这是事件数据结构的一部分:

tabBar = *somecode*...{
....
onEndEditTab: function (callback) {
return this.modelEvent.subscribe({
event: endEditTabEvent
}, callback);
},....
}

这是我当前的代码:

const tabBar = new tabBar();
tabBar.inject(domContainer);
const observer={
next: (t) =>{
const oldValue=t.target.textContent;
const cbObservable = Rx.Observable.bindCallback(tabBar.onEndEditTab);
//a new cbObservable is created at each dblclick event
// (due to bindCallBack property which is to retern only one time.
cbObservable .call(tabBar).subscribe(
(v) => {
console.log({oldLabel:oldValue,newLabel:v[0].button.label});
}
);
Rx.Observable.fromEvent(tabBar, 'dblclick').subscribe(observer);

每次编辑选项卡标签时,此代码都会工作并记录旧值和新值。但目前我想要的不仅仅是打印它,而是将所有这些结果聚合到一个新的 Observable 流中。使用大理石图:

dblclick : ----(1)----(2)---....(n)->

(其中有未知数量 n 的 dblclick...)映射到:

cbObservable : ----(1:{old,new})--|
----(2:{old,new})--|
....
----(n:{old,new})--|

我目前想要的是:

outputStream : ----(1:{old,new})---(2:{old,new})--...(n:{old,new})--->

其中,outputStream 是一个热可观察对象;有没有办法在上述所有限制下做到这一点?谢谢!

最佳答案

尝试使用 switchMap

Rx.Observable.fromEvent(tabBar, 'dblclick').switchMap(() => {
const oldValue=t.target.textContent;
return Rx.Observable.bindCallback(tabBar.onEndEditTab).map((v) => {
return {old: oldValue, new: v[0]}
});
})

或者类似的东西,然后对结果可观察进行单一订阅

关于javascript - 使用 RxJs 将多个回调返回映射到 observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45618872/

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