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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 05:53:20