Как написать выборку в Code by Zapier?

В zapier я использую действие Code By Zapier. Он основан на node.js. Мне нужно использовать fetch для реализации REST-API моей CRM.

Вот код, который я написал, и он хорошо работает, когда я попробовал его с VS Code (вне Zapier):

// the code by zapier includes already the require('fetch')

var api_token = "..."; // my api
var deal_name = "Example"; // a string

fetch("https://api.pipedrive.com/v1/deals/find?term="+deal_name+"&api_token=" + api_token)
  .then(function(res) {
    return res.json();
  }).then(function(json) {
     var deal_id = json.data[0].id;
     console.log("deal_id="+deal_id);
  }).catch(function(error) {
     console.log("error");
  });

output = {id: 1, hello: "world"}; // must include output...

Ошибка, которую я получил от Zapier:

Если вы делаете асинхронный (с библиотекой выборки), вам нужно использовать обратный вызов!

Пожалуйста, помогите мне с решением.


person Lior Elk    schedule 17.08.2015    source источник


Ответы (1)


Это классическая ошибка при написании кода в средах Node.js/callback.

Вы используете console.log, который печатает на вашу консоль, но не возвращает данные родителю (в данном случае Zapier).

Вот пример плохого и хорошего кода:

// bad code
fetch(url)
  .then(function(res) {
    return res.json();
  }).then(function(json) {
    // when i run this in my node repl it works perfect!
    // the problem is this doesn't return the data to zapier
    // it just prints it to the system output
    console.log(json);
  });

// good code
fetch(url)
  .then(function(res) {
    return res.json();
  }).then(function(json) {
    // but if i swap this to callback, this works perfect in zapier
    callback(null, json);
  });

Надеюсь, это поможет!

person Bryan Helmig    schedule 18.08.2015
comment
Привет, могу ли я получить много выписок за один раз. Спасибо. - person hungndv; 19.08.2015
comment
@hungndv, я понял, как работает этот механизм. Вы можете написать fetch внутри fetch. Вам всегда нужно, чтобы процедура была завершена обратным вызовом. Следовательно, вы не можете писать выборку после выборки! поскольку обратный вызов завершит действие ZAP. Тем не менее, Брайан недавно включил несколько действий для одного триггера, которые выполняются одно за другим, так что вы можете дважды выполнить код за zapier, и вам может удастся отфильтровать или изменить второй код в результате первого, но я не пробовал это еще. - person Lior Elk; 26.09.2015