Promise中使用setInterval:resolve后是否需调用clearInterval?
问题解答
是的,必须调用clearInterval()来停止定时器。当你调用resolve(true)后,Promise的状态会变为已完成,但setInterval创建的定时器并不会自动停止——它会每隔5秒继续尝试读取Excel文件,持续占用CPU和IO资源,完全没必要。
修改后的代码可以这样写:
const navTimeout = new Promise((resolve, reject) => { // 保存定时器ID,方便后续清除 const intervalId = setInterval(async () => { try { await workbook.xlsx.readFile("variables.xlsx") const sheet = workbook.getWorksheet(1) if(sheet.getCell('B13').value === "D"){ clearInterval(intervalId) // 触发条件满足后立即清除定时器 return resolve(true) } } catch (error) { console.log("Workbook being used") } }, 5000) })
另外补充一点:如果后续出现需要主动终止Promise(调用reject)的场景,也记得先清除定时器再执行reject,避免不必要的资源泄漏。
内容的提问来源于stack exchange,提问作者Vivek Y V
相关产品推荐
相关产品推荐

