setInterval无法在React Native中使用异步功能

时间:2020-07-29 22:23:39

标签: reactjs typescript react-native expo

我只是在学习对本机的反应,我正在尝试录制视频并在屏幕上显示剩余的视频时长。

我正在使用以下代码:

setInterval (() => {
                    this.setState ({progress: progress * 2});
                  }, 1000);
                  var video = await this.camera.recordAsync ({
                    mute: true,
                    quality: '480p',
                    maxDuration: this.state.max_duration,
                  });

但是,视频录制的效果很好,但是setiInterval已停止工作。如何在async funtion中运行setInterval?请帮忙。

1 个答案:

答案 0 :(得分:0)

JavaScript / ReactJS / React-Native没有本地睡眠功能。由于在ES2018中实现了promise和async / await,因此可以执行setTimeout / setInterval:

要为异步功能设置setInterval:

setInterval(async () => {
    await print("waiting") 
}, 2000);

(也可以尝试这样做),您可以使函数递归。这样,您可以在函数完成后为下一次迭代启动超时。

async function doSomething() {
    //code to run on a interval

    setTimeout(doSomething, 2000); // <------------------
 
}
setTimeout(doSomething, 2000);

要为异步功能(如睡眠功能)设置setTimeout:

首先将其作为函数放置在您的代码中

    const sleep = (milliseconds) => {
      return new Promise(resolve => setTimeout(resolve, milliseconds))
    }

现在在异步函数中使用此函数:

await sleep(2000)

您也可以使用它

    sleep(500).then(() => {
      console.log("waiting"); 
      
    })