Javascript 在后台模式下使用Promise时出现Android应用程序错误
我的目标是将一个方法延迟1s。Promise在前台模式下非常有效。如果在后台模式下使用,它将抛出未处理的承诺 代码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 实际行为: 代码冻结并等
const recorderStop = async () => {
await new Promise((resolve) => setTimeout(resolve, 1000)); // used to delay.
... the code I wish to invoke...
}
预期行为:
代码在调用其余代码之前等待1s
实际行为:
代码冻结并等待等待新承诺
返回承诺,直到应用程序处于前台模式
编辑、测试代码:
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