如何实现关闭当前弹窗后再打开下一个弹窗?
解决方案
可以用Promise + async/await实现同步顺序的弹窗打开逻辑,把「打开弹窗并等待关闭」的操作封装成异步任务,通过await确保上一个弹窗关闭后再打开下一个。
具体代码实现
// 封装打开弹窗并等待关闭的异步函数 function waitForWindowClose(url) { return new Promise((resolve) => { const popup = openWindow(url); // 处理弹窗被浏览器拦截的情况 if (!popup) { console.error('弹窗被浏览器拦截'); resolve(); return; } // 轮询检测弹窗是否关闭 const intervalId = setInterval(() => { if (popup.closed) { clearInterval(intervalId); resolve(); } }, 100); // 每100ms检测一次,可根据需求调整间隔 }); } // 修改原函数为async函数,实现顺序执行 async function openWindows() { const urls = getListOfUrls(); for (let url of urls) { await waitForWindowClose(url); } }
代码说明
waitForWindowClose函数返回一个Promise,打开弹窗后通过定时器轮询检测弹窗的closed属性,一旦窗口关闭就清理定时器并resolve Promise。openWindows改为async函数后,用await等待每个弹窗关闭的Promise完成,for循环会暂停执行,直到当前弹窗关闭后才会处理下一个URL,完全符合「关闭一个再打开下一个」的需求。- 额外处理了弹窗被浏览器拦截的情况,避免后续流程卡住。
内容的提问来源于stack exchange,提问作者Ughy23
相关产品推荐
相关产品推荐

