首页 > 解决方案 > 为什么这个 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,感觉我遗漏了一些明显的东西,也许是一组括号。感谢您的帮助

标签: javascriptzapier

解决方案


大卫在这里,来自 Zapier 平台团队。您遇到了一个令人困惑且大部分未记录的功能,其中在代码步骤之后为每个返回的项目运行项目。这通常是所需的行为 - 当您返回 3 个提交时,您想要创建 3 个记录。

在您的情况下,它还会多次运行后续不相关的操作,这听起来像是不受欢迎的。在这种情况下,有 2 个 zaps 可能更容易。或者,如果“Zoho2”只发生一次,把它放在第一位,让分支在下游发生。


另外,我有一些不请自来的 javascript 建议(因为你提到你是初学者)。查看Array.forEach( docs ),它可以让您遍历数组,而无需管理尽可能多的变量(i每次都是您自己的)。此外,尽可能尝试使用letand constover var- 它使您的变量范围尽可能小,这样您就不会意外地将值泄漏到其他区域。

​如果您还有其他问题,请告诉我!


推荐阅读