【问题标题】:Zapier scripting - for loopsZapier 脚本 - for 循环
【发布时间】:2018-07-17 00:58:48
【问题描述】:

我似乎无法弄清楚这一点。这是我的工作 JSfiddle 代码,可以完美地将数据发送到控制台。我知道我的 zapier 应用程序正在通过身份验证。如果我只是返回,我将获得 200 次成功

var stuff = 
{
    "uri":"some URL here",
    "action":"EXPORT",
    "result":
    {
        "column_order":["Name","email","TimeStamp"],
            "rows":[
                ["ted2","ted2@example.com","06 Feb, 2018 04:37:16"],
                ["jimf","jimf@example.com","06 Feb, 2018 19:03:39"]
                ]
    }
};

var results2 = [];

for (var j = 0; j < stuff.result.rows.length; j++)
{
    var result = {};
for (var i = 0; i < stuff.result.column_order.length; i++)
{
     result['"' + stuff.result.column_order[i] + '"'] = stuff.result.rows[j][i];

  }
  results2.push(result);
}

 console.log(results2);

吐出来:

{
  "Name": "ted2",
  "email": "ted2@example.com",
  "TimeStamp": "06 Feb, 2018 04:37:16"
}{
  "Name": "jimf",
  "email": "jimf@example.com",
  "TimeStamp": "06 Feb, 2018 19:03:39"
}

现在,如果我尝试将其转换为 Zapier Post POLL 函数,我会不断收到错误消息:Javascript Exception: TypeError: Cannot read property 'rows' of undefined

这是我的 Zapier Post Poll 功能。我错过了什么? For 循环的工作方式不同。

email_post_poll: function(bundle){
  var response = z.JSON.parse(bundle.response.content);
  var results2 = [];

    for (var j = 0; j < response.result.rows.length; j++)
      {
         var result = {};
         for (var i = 0; i < response.result.column_order.length; i++)
        {
         result['"' + response.result.column_order[i] + '"'] = response.rows[j][i];

        }
        results2.push(result);
  }
   return results2 || [];
}

【问题讨论】:

    标签: javascript zapier


    【解决方案1】:

    David 来自 Zapier 平台团队。

    您的问题出在 for 循环中,您调用的是 = response.rows[j][i],它应该是 = response.result.rows[j][i]。如果这不能解决问题,我建议使用console.log 以确保您知道响应中实际出现的内容。

    附带说明,数组在 js 中是真实的,所以results2 || [] 永远不会返回右边的空数组。

    【讨论】:

    • 好收获。我一直在点符号上来回走动而错过了。它没有解决它。问题在于第一个“For”行。我知道它已经挂断了,因为如果我不断更改符号,错误就会改变。我尝试在循环之前插入一个 console.log(response) 并且没有出现。我没有得到控制台转储。我正在使用网络构建器,因为这应该很容易。在顶部,我有来自工作 Jsfiddle 的变量“stuff =”是我在“请求日志”中的 API 响应,所以点符号应该是相同的?
    【解决方案2】:

    我得到了这个工作。 bundle.response.content 在所有内容之上都有一个“响应”的父数组。所以我实际上不得不调用“response.response”。一切。使用 Dave 的 console.log 建议帮助我解决了这个问题,但您只能在脚本工具中看到控制台日志,然后是“捆绑日志”。我猜只是平台的学习曲线。

    email_post_poll: function(bundle){
      var response = z.JSON.parse(bundle.response.content);
      var results2 = [];
      console.log(response.response.result.rows.length);
    
        for (var j = 0; j < response.response.result.rows.length; j++)
          {
             var results3 = {};
             for (var i = 0; i < response.response.result.column_order.length; i++)
            {
             results3['"' + response.response.result.column_order[i] + '"'] = response.response.result.rows[j][i];
    
            }
            results2.push(results3);
      }
      return results2;
    

    【讨论】:

    • 现在它可以工作了,它可能不值得改变,但如果你有一些开发方面的知识,新的 CLI 会更好!未来需要注意的事项
    • 我玩过 CLI builder。我同意更强大。我刚刚构建的这个应用程序是一个超级通用的 Web 平台,具有非常好的 API,但没有 Zapier 触发器。我只需要这个 post_poll 函数来操作 json 响应,我的应用程序和集成就完成了。感谢您朝正确的方向轻推!
    猜你喜欢
    • 2012-04-16
    • 1970-01-01
    • 2015-06-16
    • 2022-05-17
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多