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

在Zapier Node.js环境调用Asana API时如何为let定义的body添加IF逻辑

问题原因

你无法在对象字面量的定义内部直接使用if/else语句,这是JavaScript的语法限制,所以才会出现之前尝试失败的情况,可通过以下两种方案实现需求:


方案1:先定义基础配置,再动态修改字段(可读性更高)

在完成dateStartFormatted和dateEndFormatted的赋值后,先构建不带日期字段的基础请求数据,再根据判断条件添加对应的日期字段即可,修改后的完整代码如下:

// this is wrapped in an `async` function
// you can use await throughout the function

// get personName
var personName = inputData.personName;
// set dateStart
const dateStart = inputData.dateStart;
// convert the format of MM/DD/YYYY to YYYY-MM-DD for Asana's use
var dateStartFormatted = new Date(dateStart).toISOString().split('T')[0];
// set dateEnd
const dateEnd = inputData.dateEnd;
// convert the format of MM/DD/YYYY to YYYY-MM-DD for Asana's use
var dateEndFormatted = new Date(dateEnd).toISOString().split('T')[0];
// get dateDuration
var dateDuration = inputData.dateDuration;
// get taskURL from the custom fields above
var theURL = inputData.eventLink;
// encode the URL
var theEventLinkFinal = encodeURI(theURL);
// get dateStartPretty
var dateStartPretty = inputData.dateStartPretty;
// get dateEndPretty
var dateEndPretty = inputData.dateEndPretty;
// get projectSection
var projectSection = inputData.projectSection;

// 定义不带日期字段的基础数据
let baseData = {
  "custom_fields": {
    "917734345465519": "917734345465549"
  },
  "name": personName + " Off",
  "notes": "Date range: " + dateStartPretty + " – " + dateEndPretty + "\n\nTotal number of days: " + dateDuration + "\n\nCalendar link: " + theEventLinkFinal,
  "memberships": [ 
    {
      "project": "893079009430519",
      "section": projectSection
    }
  ],
  "followers": [
    "670933960116792",
    "7747475052050"
  ],
  "workspace": "301669572129"
};

// 根据日期判断添加对应字段
if (dateStartFormatted === dateEndFormatted) {
  baseData.due_at = dateStartFormatted;
} else {
  baseData.start_on = dateStartFormatted;
  baseData.due_on = dateEndFormatted;
}

// 组装最终请求体
let body = {
  "data": baseData
};

// create the task based on the body and data
const res = await fetch('https://app.asana.com/api/1.0/tasks', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json', 
    'Authorization': 'Bearer 0/XXXXXXXX'
  },
  body: JSON.stringify(body)
});
const data = await res.json();
output = {data: data};

方案2:三元运算符+对象展开语法(写法更紧凑)

如果你不需要拆分对象定义,也可以用Node 10完全支持的对象展开运算符,结合三元判断直接在body定义内部完成逻辑,核心修改部分如下:

let body = {
  "data": {
    "custom_fields": {
      "917734345465519": "917734345465549"
    },
    // 动态插入对应日期字段
    ...(dateStartFormatted === dateEndFormatted ? 
      { "due_at": dateStartFormatted } : 
      { "start_on": dateStartFormatted, "due_on": dateEndFormatted }
    ),
    "name": personName + " Off",
    "notes": "Date range: " + dateStartPretty + " – " + dateEndPretty + "\n\nTotal number of days: " + dateDuration + "\n\nCalendar link: " + theEventLinkFinal,
    "memberships": [ 
      {
        "project": "893079009430519",
        "section": projectSection
      }
    ],
    "followers": [
      "670933960116792",
      "7747475052050"
    ],
    "workspace": "301669572129"
  }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:24:05