如何打破 then 块中的 foo 循环?

问题描述 投票:0回答:1

我是 Cypress 和 JavaScript 的新手。我想创建一个循环来执行具有不同值的请求,直到获得特定响应。

let continue_loop = 1;

loginLoop: for (let i = 1; i < 100; i++) {
  cy.request({
    // url: Cypress.env("web_api")+"/1.0/user/login",
    url: Cypress.env("api").staging + "/1.0/user/login",
    method: "POST",
    failOnStatusCode: false,
    body: {
      email: "email" + i + "@email.com",
      password: "Helloworld10",
    },
  }).then((response) => {
    if (response.status == 403) {
      continue_loop = 2;
    }
  });

  if (continue_loop == 2) {
    break loginLoop;
  }
}

看起来

continue_loop
只能在then块中获取值
2
,因为之后它总是返回1,所以循环永远不会中断。我也尝试使用 Cypress 别名,但结果相同。我怎样才能实现这个目标?

javascript promise cypress
1个回答
0
投票

Cypress 不使用承诺,这很烦人,但你可以将事情变成你可以等待的承诺:

for (let failures = 0, i = 1; failures < 2 && i < 100; i++) {
  await new Promise(resolve => {
    cy.request({
      ...,
    }).then((response) => {
      if (response.status == 403) {
        failures++;
      }
      resolve();
    });
  });
}
© www.soinside.com 2019 - 2024. All rights reserved.