嗨,在这个代码块中,我的要求是执行函数 test(),如果它花费的时间超过 1 分钟,它应该停止执行(它正在经历无限循环并导致页面崩溃)。
我使用 Promise 和 Timer 来解决这个问题,但这里我面临的问题是超时函数甚至在执行executeWithRace 之前就被调用,并且它没有按预期工作,如何重构此代码?
async function executeWithRace() {
const response = await Promise.race([timeoutPromise, testPromise]);
console.log(response)
}
const timeoutPromise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Timed Out');
}, 60000); // 1 minute timeout
});
const testPromise = new Promise((resolve, reject) => {
test(); // Execute the original test function
resolve("testSuccessfull"); // Resolve if test function completes without error
});
谢谢
我还尝试为这两个promise创建函数并将这些函数传递给promise.race(),但在这里我遇到了这种情况:只有promise.race()中第一个提到的函数被执行,而这两个函数都没有被执行t 同时执行。
JS 是单线程的,所以你的“无限循环”功能会完全阻止其他一切。您无法使用 async 或 setTimeout 解决这个问题(它们也被阻止)。对于这样的场景,您可以尝试使用worker和worker.terminate()。