You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现关闭当前弹窗后再打开下一个弹窗?

解决方案

可以用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 00:06:25