gpt4 book ai didi

javascript - 如何在Javascript中的while循环中按顺序执行代码?

转载 作者:行者123 更新时间:2023-12-04 09:57:28 31 4
gpt4 key购买 nike

我正在尝试在 Postman 上运行一些 JavaScript 代码,但我找不到让它按照我需要的顺序运行的方法。这就是我想要做的:

  • 检索 API 响应并验证“待处理”数组是否包含任何项目
  • 如果 id 是,我会将记录的 id (orderId) 保存在环境变量中,以便在我的实际请求中使用
  • 在这一点上,我将设置 found = true 并在它离开 setTimout 函数时中断循环

  • 注意:我创建了在尝试之间引入 400 毫秒延迟的函数,因为它将允许填充待处理数组
        var found = false;
    var counter = 0;

    while (counter < 10) {

    setTimeout(async () => {
    var size = await response.json().pending.length;

    if (size > 0) {
    var orderId = response.json().pending[0].orderId;
    pm.environment.set("current_order", orderId);
    found = true;
    }
    }, [400]);

    console.log(found);
    if (found) { break; }

    counter++;
    }

    我的问题是 setTimeout 函数之外的部分首先执行,所以它永远不会满足条件“If (found)”。它总是执行代码 10 次,即使在第一次尝试中找到了记录。

    我的问题是:我如何编写它以检查每次尝试后是否找到记录,如果为正则中断循环?

    谢谢!

    最佳答案

    如上所述,您或许可以使用更简单的递归函数来解决此问题。关于它的外观的示例:

    var found = false;
    var size = 0;

    async function checkResponse() {
    var size = await response.json().pending.length;

    if (size > 0) {
    var orderId = await response.json().pending[0].orderId;
    pm.environment.set('current_order', orderId);
    found = true;
    }
    if (!found) {
    await checkResponse();
    }
    }

    await checkResponse();

    下面是对上述逻辑的同步测试:
    var found = false;
    // var size = 0;
    var size = -5;

    function checkResponse() {
    // var size = await response.json().pending.length;
    size += 1;
    console.log(size);

    if (size > 0) {
    // var orderId = response.json().pending[0].orderId;
    // pm.environment.set('current_order', orderId);
    console.log("pm.environment.set('current_order', orderId);");
    found = true;
    }
    console.log('END?');
    console.log(found);
    if (!found) {
    checkResponse();
    console.log('checkResponse();');
    }
    }

    checkResponse();
    输出:
    -4
    END?
    false
    -3
    END?
    false
    -2
    END?
    false
    -1
    END?
    false
    0
    END?
    false
    1
    pm.environment.set('current_order', orderId);
    END?
    true
    checkResponse();
    checkResponse();
    checkResponse();
    checkResponse();
    checkResponse();

    关于javascript - 如何在Javascript中的while循环中按顺序执行代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61893855/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com