3

在 zapier 中,我使用了Code By Zapier的动作。它基于 node.js。我需要使用fetch来实现我的 CRM 的 REST-API。

这是我编写的代码,当我使用 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 得到的错误是:

如果您正在执行异步(使用 fetch 库),则需要使用回调!

请帮我解决它。

4

2 回答 2

8

这是在 Node.js/callback 环境中编码时的典型错误。

您正在使用console.logwhich 打印到您的控制台,但不将数据返回给父级(在本例中为 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);
  });

我希望这有帮助!

于 2015-08-18T16:04:00.893 回答
2

如今,您还可以使用async/await,如示例代码块顶部的默认注释所述:

// this is wrapped in an `async` function
// you can use await throughout the function

const response = await fetch('http://worldclockapi.com/api/json/utc/now')
return await response.json()

请参阅文档中的更多示例:https ://zapier.com/help/create/code-webhooks/javascript-code-examples-in-zaps#step-2

请注意,免费层有1 秒的超时时间Promise.all()(如果您用于执行多次提取,则尤其重要!)

于 2021-08-19T07:39:17.520 回答