Timer RxJs:反复检查全局变量的值,直到值满足要求或达到最大时间限制
在Angular应用程序中,我有一个用例,需要检查Timer RxJs:反复检查全局变量的值,直到值满足要求或达到最大时间限制,timer,rxjs,Timer,Rxjs,在Angular应用程序中,我有一个用例,需要检查窗口全局对象上的属性值(该属性值由其他异步操作设置)。根据这个值,我需要在UI上更新一些东西,这就是本文的背景 我找到了一个解决方案,部分满足了我的目标,但需要一些调整。代码如下: import { of, timer } from 'rxjs'; import { takeWhile, map, pluck } from 'rxjs/operators'; const source = timer(1000, 1000) const exa
窗口
全局对象上的属性值(该属性值由其他异步操作设置)。根据这个值,我需要在UI上更新一些东西,这就是本文的背景我找到了一个解决方案,部分满足了我的目标,但需要一些调整。代码如下:
import { of, timer } from 'rxjs';
import { takeWhile, map, pluck } from 'rxjs/operators';
const source = timer(1000, 1000)
const example = source.pipe(
map((v) => {
return {
currentTime: v,
currentStatus: Boolean((window as any).Test)
}
}),
takeWhile(val => {
return !val.currentStatus && val.currentTime <= 10
}),
pluck('currentStatus')
);
const subscribe = example.subscribe(
val => console.log(val),
() => console.log("error"),
() => console.log("complete")
);
setTimeout(() => {
(window as any).Test = "Test"
}, 4500)
从'rxjs'导入{of,timer};
从'rxjs/operators'导入{takeWhile,map,pull};
常量源=计时器(1000,1000)
const示例=source.pipe(
地图((v)=>{
返回{
当前时间:v,
currentStatus:Boolean((任意窗口).Test)
}
}),
takeWhile(val=>{
return!val.currentStatus&&val.currentTime console.log(val),
()=>console.log(“错误”),
()=>console.log(“完成”)
);
设置超时(()=>{
(如有窗口)。Test=“Test”
}, 4500)
我使用timer
重复执行任务,并在条件匹配时使用takeWhile
停止计时器。停止计时器有两个条件:1)值从未定义变为我需要的值2)或达到最大时限。出于测试目的,我使用
setTimeout()
手动设置该值最终观察的当前结果是:
false,false,false,false
。但实际上,我需要最终的true
值。takeWhile
不取最终值。是否有任何方法将其调整到我需要的程度?如果使用,
takeWhile
接受第二个参数,该参数控制是否发出使其完成的值
所需的用法只是将第二个参数设置为true
:
takeWhile(..., true)
你是否绑定到RxJS 6.2.2(从StackBlitz设置)?如果没有,你可以使用6.4+,
takeWhile
有一个可选的第二个参数,当设置为true
时,它也会发出最终值。哦,很高兴知道。这似乎是一个新功能。我会尝试。你应该对这篇文章的答案发表评论