javascript - 为什么这个 JavaScript 在 Zapier 中循环了两次?
问题描述
这是一个视频,显示了我正在努力解决的问题。
这是该过程的高级描述,然后是我编写的实际 JavaScript 代码。
过程 我构建了 2 个 Zaps,每个都像这样运行:
第 1 步 - 触发器(Cognito Form,具有重复部分)
第 2 步 - JavaScript 代码(为其中一个重复部分创建表单字段数组,并使用 将它们分隔成单独的字符串.split
)
第 3 步 - 操作(为每个字符串创建一个 ZOHO CRM 任务)
第一个 Zap 在表单的一个部分(有销售的访问)上运行,第二个 Zap 在表单的另一个部分(没有销售的访问)上运行。这些 Zaps 中的每一个都可以单独工作,所以我知道代码很好,但我想通过组合代码将两个 Zaps 合并为一个。
我尝试通过五个步骤进行组合:
触发器 - Code1 - Zoho1 - Code2 - Zoho2
但是 Zoho2 任务都重复了
然后我尝试重新排序五个步骤:
触发器 - Code1 - Code2 - Zoho1 - Zoho2
但现在 Zoho1 任务和 Zoho2 任务重复了。
最后,我尝试将所有 JavaScript 代码合并为一个:
跳跳虎 - 组合代码 1+2 - Zoho 1 - Zoho2
但是当我在 Zoho1 中映射它们时,只有来自“Code2”中数组的字符串可供我使用。
代码:
if (inputData.stringVSAccount == null) {
var listVSAccountArray = [];
var listVSUnitsArray = [];
var listVSPriceArray = [];
var listVSNotesArray = [];
var listVSVisitCallArray = [];
} else {
var listVSAccountArray = inputData.stringVSAccount.split(",");
var listVSUnitsArray = inputData.stringVSUnits.split(",");
var listVSPriceArray = inputData.stringVSPrice.split(",");
var listVSNotesArray = inputData.stringVSNotes.split(",");
var listVSVisitCallArray = inputData.stringVSVisitCall.split(",");
}
var output = [];
var arrayNos = listVSAccountArray.length;
var i = 0;
do {
var thisItemVSAccount = new String(listVSAccountArray[i]);
var thisItemVSUnits = new String(listVSUnitsArray[i]);
var thisItemVSPrice = new String(listVSPriceArray[i]);
var thisItemVSNotes = new String(listVSNotesArray[i]);
var thisItemVSVisitCall = new String(listVSVisitCallArray[i]);
var thisItemObj = {};
thisItemObj.itemVSAccount = thisItemVSAccount;
thisItemObj.itemVSUnits = thisItemVSUnits;
thisItemObj.itemVSPrice = thisItemVSPrice;
thisItemObj.itemVSNotes = thisItemVSNotes;
thisItemObj.itemVSVisitCall = thisItemVSVisitCall;
output.push({ thisItemObj });
i++;
} while (i < arrayNos);
//This is where the second zaps code is pasted in the combined version
if (inputData.stringOVAccount == null) {
var listOVAccountArray = [];
var listOVNotesArray = [];
var listOVVisitCallArray = [];
} else {
var listOVAccountArray = inputData.stringOVAccount.split(",");
var listOVNotesArray = inputData.stringOVNotes.split(",");
var listOVVisitCallArray = inputData.stringOVVisitCall.split(",");
}
var output = [];
var arrayNos = listOVAccountArray.length;
var i = 0;
do {
var thisItemOVAccount = new String(listOVAccountArray[i]);
var thisItemOVNotes = new String(listOVNotesArray[i]);
var thisItemOVVisitCall = new String(listOVVisitCallArray[i]);
var thisItemObj = {};
thisItemObj.itemOVAccount = thisItemOVAccount;
thisItemObj.itemOVNotes = thisItemOVNotes;
thisItemObj.itemOVVisitCall = thisItemOVVisitCall;
output.push({ thisItemObj });
i++;
} while (i < arrayNos);
我这周刚开始学习 JavaScript,感觉我遗漏了一些明显的东西,也许是一组括号。感谢您的帮助
解决方案
大卫在这里,来自 Zapier 平台团队。您遇到了一个令人困惑且大部分未记录的功能,其中在代码步骤之后为每个返回的项目运行项目。这通常是所需的行为 - 当您返回 3 个提交时,您想要创建 3 个记录。
在您的情况下,它还会多次运行后续不相关的操作,这听起来像是不受欢迎的。在这种情况下,有 2 个 zaps 可能更容易。或者,如果“Zoho2”只发生一次,把它放在第一位,让分支在下游发生。
另外,我有一些不请自来的 javascript 建议(因为你提到你是初学者)。查看Array.forEach
( docs ),它可以让您遍历数组,而无需管理尽可能多的变量(i
每次都是您自己的)。此外,尽可能尝试使用let
and const
over var
- 它使您的变量范围尽可能小,这样您就不会意外地将值泄漏到其他区域。
如果您还有其他问题,请告诉我!
推荐阅读
- spring - 恢复,登录后,用户在登录前输入的值,
- android - 更新到 API 28 后找不到资源样式/Widget.Design.CoordinatorLayout
- spring-boot - 使用 localdate 进行春季 jpa 审计
- java - 生成 8 对整数
- java - 如何在 Findbugs 中使用 Checker Framework 注释?
- c# - 从 IEnumerable 转换为 ISet
- node.js - 在 node.js 中未定义 URL
- laravel-5.6 - 填充的数组抛出未定义的偏移量:Laravel 5.6 中的 1
- android - 使用 Retrofit 和 Gson 从 Blogger Api JSON 中获取标签
- python - 将 Panda DataFrame 层叠在一起