0

我在 NodeJS 中有一个每秒更新的变量。我想监视它以查看它是否低于某个阈值(例如 1000)。

如果它确实低于阈值,它应该等待 5 秒并监视变量是否再次回到阈值之上。如果不是,它应该返回一个函数。如果它确实超过,它可以停止时间并重新开始监控。

无法让任何代码工作。

不确定下面的代码是否方向正确..!

var waitedSoFar = 0;
var imageDisplayed = CheckIfImageIsDisplayed(); //this function is where you check the condition

while(waitedSoFar < 5000)
{
   imageDisplayed = CheckIfImageIsDisplayed();
   if(imageDisplayed)
   {
      //success here
      break;
   }
   waitedSoFar += 100;
   Thread.Sleep(100);
}
if(!imageDisplayed)
{
    //failed, do something here about that.
}
4

1 回答 1

0

你可以有一个函数来观察和包装这个经常变化的变量。像这样简单的东西

function observeValue(initialValue) {
  let value = initialValue
  let clearEffects = []
  let subscribers = []
  return {
    value: () => value,
    change(val) {
      clearEffects.forEach(oldEffect => oldEffect && oldEffect())
      value = val
      clearEffects = subscribers.map(subscriber => subscriber(value))
    },
    subscribe(listener) {
      subscribers.push(listener)
    }
  }
}

足够通用。该函数返回三个方法:

  • 一个获取当前值
  • 一个改变值
  • 订阅每一个价值变化

我建议利用最后一个来监控和触发任何副作用。

你可以像这样使用它:

const monitor = observeValue(true)

monitor.subscribe((value) => {
  if (value !== false) {
    return
  }

  const timeout = setTimeout(() => {
    console.log('value was false for five seconds')
  }, 5000)

  return () => {
    clearTimeout(timeout)
  }
})

在其他地方你可以用

monitor.change(false)
于 2019-08-19T01:32:07.297 回答