Скрипты Zapier — для циклов

Я не могу понять это. Вот мой рабочий код JSfiddle, который отлично отправляет данные на консоль. Я знаю, что мое приложение zapier проходит аутентификацию. Я получу 200-успех, если просто вернусь

var stuff = 
{
    "uri":"some URL here",
    "action":"EXPORT",
    "result":
    {
        "column_order":["Name","email","TimeStamp"],
            "rows":[
                ["ted2","[email protected]","06 Feb, 2018 04:37:16"],
                ["jimf","[email protected]","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": "[email protected]",
  "TimeStamp": "06 Feb, 2018 04:37:16"
}{
  "Name": "jimf",
  "email": "[email protected]",
  "TimeStamp": "06 Feb, 2018 19:03:39"
}

Теперь, если я попытаюсь преобразовать это в функцию опроса Zapier Post, я продолжаю получать ошибки: Исключение Javascript: 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 || [];
}

person T Moriello    schedule 06.02.2018    source источник


Ответы (2)


Это Дэвид из команды Zapier Platform.

Ваша проблема в цикле for, вы вызываете = response.rows[j][i], который должен быть = response.result.rows[j][i]. Если это не прояснит ситуацию, я бы предложил использовать console.log, чтобы убедиться, что вы знаете, что на самом деле приходит в ответ.

В качестве примечания: массивы в js верны, поэтому results2 || [] никогда не вернет пустой массив справа.

person xavdid    schedule 06.02.2018
comment
Хороший улов. Я ходил туда-сюда по точечной нотации и пропустил это. Хотя это не исправило. Проблема связана с самой первой строкой For. Я знаю, что это зависает, потому что, если я буду продолжать менять обозначения, ошибка изменится. Я попытался вставить console.log(ответ) прямо перед циклом, и ничего не появилось. Я не получаю дамп консоли. Я использую веб-конструктор, так как это должно быть довольно просто. В верхнем разделе, где у меня есть мои переменные = от работающего Jsfiddle, находится мой ответ API в журналах запросов, поэтому точечная нотация должна быть такой же? - person T Moriello; 07.02.2018

У меня это работает. У bundle.response.content был родительский массив «ответа» поверх всего. Так что мне на самом деле пришлось вызывать «response.response». За все. Использование предложения 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;
person T Moriello    schedule 07.02.2018
comment
Теперь, когда он работает, возможно, его не стоит менять, но новый интерфейс командной строки намного лучше подходит для этого, если у вас есть навыки разработки! Что нужно иметь в виду на будущее - person xavdid; 07.02.2018
comment
Я играл с CLI Builder. Гораздо крепче, согласен. Это приложение, которое я только что создал, предназначалось для СУПЕР общей веб-платформы с очень хорошим API, но без триггеров Zapier. Все, что мне было нужно, это всего лишь одна функция post_poll для управления ответом json, и мое приложение и интеграция завершены. Спасибо за толчок в правильном направлении! - person T Moriello; 07.02.2018