Timer RxJs:反复检查全局变量的值,直到值满足要求或达到最大时间限制

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

在Angular应用程序中,我有一个用例,需要检查
窗口
全局对象上的属性值(该属性值由其他异步操作设置)。根据这个值,我需要在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
时,它也会发出最终值。哦,很高兴知道。这似乎是一个新功能。我会尝试。你应该对这篇文章的答案发表评论