Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.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 在后台模式下使用Promise时出现Android应用程序错误_Javascript_Android_React Native_Promise - Fatal编程技术网

Javascript 在后台模式下使用Promise时出现Android应用程序错误

Javascript 在后台模式下使用Promise时出现Android应用程序错误,javascript,android,react-native,promise,Javascript,Android,React Native,Promise,我的目标是将一个方法延迟1s。Promise在前台模式下非常有效。如果在后台模式下使用,它将抛出未处理的承诺 代码 const recorderStop = async () => { await new Promise((resolve) => setTimeout(resolve, 1000)); // used to delay. ... the code I wish to invoke... } 预期行为: 代码在调用其余代码之前等待1s 实际行为: 代码冻结并等

我的目标是将一个方法延迟1s。Promise在前台模式下非常有效。如果在后台模式下使用,它将抛出未处理的承诺

代码

const recorderStop = async () => {
  await new Promise((resolve) => setTimeout(resolve, 1000)); // used to delay.
  ... the code I wish to invoke...
}
预期行为:

代码在调用其余代码之前等待1s

实际行为:

代码冻结并等待
等待新承诺
返回承诺,直到应用程序处于前台模式

编辑、测试代码:

  • 带返回承诺的setTimeout
  • setTimeout无返回承诺
  • 代码

    const recorderStop = async () => {
      console.log('outside the timeout');
      setTimeout(async () => {
        console.log('inside timeout'); // this code is not invoked while in the background mode.
      }, 1000);
    }
    
    在后台模式下,不会调用输出,
    console.log(“内部超时”)。

    [Sat Dec 12 2020 16:10:59.517]  LOG      recorder is recording
    [Sat Dec 12 2020 16:11:01.980]  LOG      recorderStop(): outside timeout
    

    除非recorderStop的调用者需要知道代码的最终完成情况,否则您可以使用未指定的
    setTimeout()
    。在任何情况下,您都可以尝试使用它来帮助诊断问题。@Roamer-1888我认为问题出在
    setTimeout
    上。我用
    setTimeout
    console.log
    创建了一个方法,一个在
    setTimeout
    之外,一个在
    setTimeout
    之内。如果应用程序处于后台模式,它将拒绝运行
    控制台。在
    setTimeout
    中记录
    。必须猜测js事件循环在bg模式下挂起。除非recorderStop的调用者需要知道代码的最终完成情况,否则您可以使用未经批准的
    setTimeout()
    。在任何情况下,您都可以尝试使用它来帮助诊断问题。@Roamer-1888我认为问题出在
    setTimeout
    上。我用
    setTimeout
    console.log
    创建了一个方法,一个在
    setTimeout
    之外,一个在
    setTimeout
    之内。如果应用程序处于后台模式,它将拒绝运行
    控制台。在
    setTimeout
    中记录
    将不得不猜测js事件循环在bg模式下被挂起。
    
    [Sat Dec 12 2020 16:10:59.517]  LOG      recorder is recording
    [Sat Dec 12 2020 16:11:01.980]  LOG      recorderStop(): outside timeout