如何在JavaScript的then函数中包裹if条件并传递Promise值?
在then函数中添加条件判断的实现方案
你可以直接在Promise的then回调函数内部编写if条件逻辑,和普通JavaScript函数中的条件判断用法一致。以下是针对你代码的修改示例:
初始代码
const createType = ({ firstTypes = [], secondTypes = [], ...allType } = {}, skip = true) => { const builtType = buildType(allType); let finalType; let finalSecondTypes; return apiPostType(builtType) .then(waitForSync(cy.apiGetTypeWithRetry)) .then(createdType => { finalType = keysToCamelCase(createdType); const firstTypesToCreate = firstTypes.map( firstType => () => cy.createFirstType({ ...firstType, allType: createdType.id, }) ); }); };
修改后代码(加入if条件)
const createType = ({ firstTypes = [], secondTypes = [], ...allType } = {}, skip = true) => { const builtType = buildType(allType); let finalType; let finalSecondTypes; return apiPostType(builtType) .then(waitForSync(cy.apiGetTypeWithRetry)) .then(createdType => { finalType = keysToCamelCase(createdType); // 根据skip参数和firstTypes长度判断是否执行创建逻辑 if (!skip && firstTypes.length > 0) { const firstTypesToCreate = firstTypes.map( firstType => () => cy.createFirstType({ ...firstType, allType: createdType.id, }) ); // 执行所有创建操作并返回Promise,保证链式调用顺序 return Cypress.Promise.all(firstTypesToCreate.map(fn => fn())); } // 不满足条件时返回finalType,维持Promise链 return finalType; }) // 可继续链式处理结果 .then(processedResult => { // 这里可以根据前面的执行结果做后续操作 return finalType; }); };
关键注意点
then回调本质是普通函数,内部可以直接写入任何JavaScript逻辑,包括if、else分支- 如果条件块内包含异步操作(比如Cypress的创建命令),需要返回对应的Promise对象,确保后续
then能获取到正确的执行结果 - 条件不满足时,要返回一个值或
Promise.resolve(值),避免Promise链中断
内容的提问来源于stack exchange,提问作者Harika
相关产品推荐
相关产品推荐

