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

如何让for循环等待每个tempWindow函数执行完成后再执行下一次迭代?

改造实现方案

你的思路是正确的,将tempWindow改造为返回Promise,窗口关闭时触发Promise决议,再配合await等待即可实现依次打开窗口的需求。

改造后页面1完整代码

// 改造tempWindow为返回Promise
function tempWindow(text) {
    return new Promise((resolve) => {
        // 参数做URI编码,避免特殊字符导致传参错误
        const w = window.open('https://example.com/?data=' + encodeURIComponent(text), '_blank');
        const t = setInterval(() => {
            if(w.closed) {
                clearInterval(t);
                resolve(); // 窗口关闭后决议Promise,结束等待
            }
        }, 100);
    })
}

const list = ['text1', 'text2', 'text3'];

// 用async自执行函数包裹循环逻辑,支持await语法
(async () => {
    // 使用let声明i避免变量提升问题,也可以改用for of遍历
    for(let i = 0; i < list.length; i++) {
        // 等待当前窗口关闭后再进入下一轮循环
        await tempWindow(list[i]);
    }
})();

注意事项

  • 浏览器默认会拦截非用户主动交互触发的弹窗,如果你是在页面加载时自动触发该逻辑,可能会被弹窗拦截机制拦截,建议将触发入口绑定到用户点击、按键等主动交互事件上。
  • 如果传递的text参数包含中文、特殊符号,必须加encodeURIComponent编码,否则会导致URL参数解析错误。

内容的提问来源于stack exchange,提问作者Marcos Santos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:15:07