javascript - 如何手动发出事件到间隔?
问题描述
我有一个来自 rxjs 的间隔计时器,withLatestFrom
我用它连接其他可观察对象,以便在我的逻辑中使用它们。
而且我想手动触发事件而不等待下一个间隔发生。
但是reload
没有next
功能。那么有没有办法做到这一点?
import { interval } from "rxjs";
import { tap, withLatestFrom } from "rxjs/operators";
console.clear();
const reload = interval(20 * 1000).pipe(
/* withLatestFrom(someObs, ),*/
tap(() => {
console.log("do something");
})
);
reload.subscribe(r => {
console.log('nothing to do here');
});
解决方案
您可以创建一个更可观察的说法myEvent$
,并在您想使用它时触发您的事件。然后合并reload$
withmyEvent$
并订阅结果 observable。
import { Observable } from "rxjs";
import { tap, take, mergeWith } from "rxjs/operators";
const reload$ = interval(20 * 1000).pipe(
/* withLatestFrom(someObs, ),*/
tap(() => {
console.log("do something");
})
);
const myEvent$ = new Observable(sub => {
sub.next("My new event");
setTimeout(() => {
sub.next("My another event after 3 seconds");
sub.complete();
}, 3000);
});
reload$.pipe(mergeWith(myEvent$)).subscribe(r => {
console.log(r);
});
这样,您将完全控制并且能够在您想要的任何时候触发您的事件,而不管reload$
火灾何时以及同一观察者可以订阅这两种排放。
推荐阅读
- visual-studio-code - BitDefender 说 Code Insiders 下载有 Heur.BZC.NZF.Pantera.7.37C58EF0
- sql-server - 如何将 SQL Server 连接到 Android Studio
- linux - CSV 文件输出重新格式化
- python - 当停止未知时,如何使用 RangeIndex 重新标记从 1 开始的 Pandas Dataframe?
- elasticsearch - GKE 上的 Metricbeats 未按预期工作 - 缺少部署、节点等
- c++ - 在变量名之后用 () 声明非固有类型的行为与不使用时不同。即std::map
X(); - 那是怎么回事? - javascript - 使用 Vimeo Player.js API 时出现 Clickfunnels“Vimeo 未定义”错误
- python-3.x - Pandas 变换并在测量值之间添加第二行
- javascript - 根据对象属性更新对象数组中的项目
- angular - 为组件的每个实例触发 Angular 事件处理程序