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
相关产品推荐
相关产品推荐

