Javascript 当第二个可见变化时,CombineTest不发射?
有两个可观察对象-Javascript 当第二个可见变化时,CombineTest不发射?,javascript,typescript,rxjs,Javascript,Typescript,Rxjs,有两个可观察对象-活动$-集合$: const central:EStore<Todo> = new EStore(); const collection:EStore<Todo> = new EStore(); const active$ = central.observeActive(); const collection$ = collection.observe(); 此CombineTest功能不会触发: const isActiveTodoInCollec
活动$
-集合$
:
const central:EStore<Todo> = new EStore();
const collection:EStore<Todo> = new EStore();
const active$ = central.observeActive();
const collection$ = collection.observe();
此CombineTest
功能不会触发:
const isActiveTodoInCollection$:Observable<boolean> =
combineLatest(active$,
collection$,
(a, c)=>{
console.log("Firing");
if (getMapValue(central.active)) {
return collection.containsById(getMapValue(central.active));
}
return false;
});
但是,如果我们将
活动$
可观察变量添加到参数中,它将停止通知。这就好像活动$
必须首先通知…组合测试只有在每个观察对象至少发出一次值时才起作用
central.post(todo)并没有真正完成,因为在您的例子中,observeative()只在调用central.addActive(todo)时才真正观察,因此没有任何东西可以组合
示例为了说明这个问题,请在下面的代码中注释两个$,并取消对下一行的注释,您将看到区别
import { combineLatest, Observable } from "rxjs";
const one$ = new Observable(subscriber => {
setTimeout(() => {
console.log("set");
subscriber.next(42);
}, 1000);
});
const two$ = new Observable(subscriber => {});
// comment above two$ and uncomment this
/*const two$ = new Observable(subscriber => {
subscriber.next(56);
});*/
combineLatest(one$, two$).subscribe(([one, two]) => {
console.log(
` One Latest: ${one},
Two Latest: ${two}`
);
});
CombineTest仅在每个可观察对象至少发出一次值时才起作用。我认为在您的例子中,observeative()只有在调用central.addActive(todo)时才会触发;你搞定了-很棒的观察-谢谢!
const t$ = combineLatest(collection$, (c)=>console.log("collection$ performing a notification"));
t$.subscribe();
import { combineLatest, Observable } from "rxjs";
const one$ = new Observable(subscriber => {
setTimeout(() => {
console.log("set");
subscriber.next(42);
}, 1000);
});
const two$ = new Observable(subscriber => {});
// comment above two$ and uncomment this
/*const two$ = new Observable(subscriber => {
subscriber.next(56);
});*/
combineLatest(one$, two$).subscribe(([one, two]) => {
console.log(
` One Latest: ${one},
Two Latest: ${two}`
);
});