gpt4 book ai didi

javascript - RXJS 修改订阅者顺序

转载 作者:行者123 更新时间:2023-12-04 08:39:30 24 4
gpt4 key购买 nike

是否可以确保订阅者是观察者队列中最后执行的?一个 delay(0)对我来说没有选择,因为我需要在线执行代码而不是异步执行。

let observable = new Subject<void>();

//delay(0) no option!
observable.pipe().subscribe(() => console.log("I want to be last!"));
observable.subscribe(() => console.log("I want to be first!"));

observable.next();
我在这里创建了一个例子: https://stackblitz.com/edit/rxjs-demo-xuf2ru
我希望第一个订阅者最后执行。当前控制台输出为:

I want to be last!

I want to be first!

最佳答案

你也可以使用一个通用的 Subject 作为 observables 之间的通信方式,如下图所示:

const observable = new Subject<void>();
const commonSub$ = new Subject();

observable.pipe().subscribe(() => {
commonSub$
.subscribe(() => {
console.log('I want to be last!');
});
});

observable.subscribe(() => {
console.log('I want to be first!');
commonSub$.next(true);
});

observable.next();
因此,只有在记录第二条消息后,才会记录第一条消息。

根据您的最新评论,您可以使用 switchMap 来确保为多个事件实现相同的功能:
observable
.switchMap(() => {
return commonSub$;
})
.subscribe(() => {
console.log("I want to be last!");
});

observable.subscribe(() => {
console.log("I want to be first!");
commonSub$.next(true);
});

关于javascript - RXJS 修改订阅者顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64632418/

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