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

Cypress wait-until插件报错:cy.then()异步同步代码混用问题

问题分析与解决

错误原因

你的代码问题出在 cy.waitUntil 的回调函数中:没有返回数据库查询的Promise链。

原本的回调函数执行了异步的 DB.Generic() 命令,但没有将这个异步操作的结果返回给 waitUntil。这导致 waitUntil 会同步收到 undefined(函数默认返回值),而后续的 .then() 块才会返回 true,Cypress 因此检测到你混合了异步命令和同步返回值,抛出错误。

修复后的代码

function waitForSENTStatusDB(GWuuid: string) {
  cy.log("wait for status 'SENT' in DB");
  cy.waitUntil(() => {
    const BodyToUse = "SELECT * FROM table where entity_id = '{GWID}' order by last_modified_at desc".replaceAll("{GWID}", GWuuid);

    // 关键:返回DB查询的Promise链,让waitUntil等待异步操作完成
    return DB.Generic(BodyToUse).then((res) => {
      const status = res[0].status;
      cy.log(`Current status: ${status}`);
      return status === INTERFACES.UploadStatus.SENT;
    });
  }, {
    errorMsg: "Timeout: Upload status is not 'SENT'",
    interval: 10000,
    timeout: 200000
  });
}

核心改动说明

在 DB.Generic(BodyToUse) 前添加 return,让 waitUntil 的回调函数返回一个Promise。这个Promise会在数据库查询完成后,解析为布尔值(状态是否为'SENT'),完全符合 waitUntil 对异步条件的要求,消除了同步/异步代码混合的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 16:15:13