Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在JS for循环中检测状态变化?_Javascript_React Native - Fatal编程技术网

Javascript 如何在JS for循环中检测状态变化?

Javascript 如何在JS for循环中检测状态变化?,javascript,react-native,Javascript,React Native,我正在尝试构建一个倒计时计时器,其工作原理如下: const startCountdown = async () => { var countdownTime = 10; setDisplayTime(countdownTime); for (let i = 0; i < 10; i++) { await sleep(1000); countdownTime = countdownTime - 1; setDi

我正在尝试构建一个倒计时计时器,其工作原理如下:

const startCountdown = async () => {

   var countdownTime = 10;
   setDisplayTime(countdownTime);

   for (let i = 0; i < 10; i++) {
       
      await sleep(1000);
      countdownTime = countdownTime - 1;
      setDisplayTime(countdownTime);

   }
}
const sleep = (ms) => {
    return new Promise((resolve) => setTimeout(resolve, ms));
};
const startCountdown = async () => {

   var countdownTime = 10;
   setDisplayTime(countdownTime);

   for (let i = 0; i < 10; i++) {

      if (timerStopped) {
         
         break;
      
      } else {
       
         await sleep(1000);
         countdownTime = countdownTime - 1;
         setDisplayTime(countdownTime);

   }
}
问题是我希望用户能够停止计时器。我最初认为它会这样工作:

const startCountdown = async () => {

   var countdownTime = 10;
   setDisplayTime(countdownTime);

   for (let i = 0; i < 10; i++) {
       
      await sleep(1000);
      countdownTime = countdownTime - 1;
      setDisplayTime(countdownTime);

   }
}
const sleep = (ms) => {
    return new Promise((resolve) => setTimeout(resolve, ms));
};
const startCountdown = async () => {

   var countdownTime = 10;
   setDisplayTime(countdownTime);

   for (let i = 0; i < 10; i++) {

      if (timerStopped) {
         
         break;
      
      } else {
       
         await sleep(1000);
         countdownTime = countdownTime - 1;
         setDisplayTime(countdownTime);

   }
}
const startCountdown=async()=>{
var=10;
设置显示时间(countdownTime);
for(设i=0;i<10;i++){
如果(计时器停止){
打破
}否则{
等待睡眠(1000);
countdownTime=countdownTime-1;
设置显示时间(countdownTime);
}
}
但新状态看起来并没有传递到for循环中,它只记得函数启动时的状态


有办法解决这个问题吗?我不需要暂停和重新启动计时器,我只需要它停止(然后我就可以从那里重置它)。

我为您构建了一个rxjs版本……我发现这个解决方案更容易一些,因为它能够操作流

const{
行为主体,
计时器
}=rxjs
常数{
过滤器,
水龙头
最晚从
}=rxjs.运算符;
常数
startButton=document.getElementById(“startButton”),
pauseButton=document.getElementById(“pauseButton”),
continueButton=document.getElementById(“continueButton”),
stopButton=document.getElementById(“stopButton”);
班级计时器{
_时间=0;
_时间订阅;
_暂停=新行为主体(false);
设定时间(时间){
这个时间=时间
}
开始(){
常数步长=1000;
this._timerSubscription=timer(0,步骤).pipe(withLatestFrom(this._暂停),filter([v,暂停]=>!暂停))。订阅(val=>{
如果(这一次){
myTimer.start();
};
pauseButton.onclick=()=>{
myTimer.pause();
}
stopButton.onclick=()=>{
myTimer.stop();
}
continueButton.onclick=()=>{
myTimer.continue();
}

开始
停止
暂停

继续
非常感谢。这对React-Native有效吗?需要检查一下。它应该…我见过有人一起使用React-Native和rxjs:)不幸的是没有。我仍在处理它,但此代码:pause(){this.\u pause.next(true)}没有更改withLatestFrom()中的变量不管发生什么,它都是假的。