【问题标题】:Use more than one fetch request in "Code by Zapier" action using Javascript使用 Javascript 在“Zapier 代码”操作中使用多个获取请求
【发布时间】:2021-09-02 09:30:17
【问题描述】:

我目前正在尝试执行“Zapier 代码”操作,以向 IronWifi 发出 API 请求,以创建用户并为其填写信息/详细信息。

目前,我已经能够通过四个“Zapier 代码”操作来做到这一点。每个操作都是一个获取请求。

但是,我希望将所有四个 API 请求合并到一个操作中。似乎当使用获取请求时,必须立即使用“回调”。我相信这会迫使行动在那一刻停止。

目前我尝试编写代码来创建用户,然后添加名字。我目前的代码如下:

var headers = {
  "Authorization": "Bearer 22ef59a2eb2a6939f5bd26bb43ff8b2d4d9b24ab",
  "Content-Type": "application/json"
};

var url = "https://us-east1.ironwifi.com/api/users";

var username = inputData.name;


var data = JSON.stringify({"username":username});

//First fetch request (API hit) for creating a user in IronWifi
var user = fetch(url, {method: "POST", headers: headers, body: data}).then(function(binaryResponse) {
  return binaryResponse.json();
}).then(function(jsonResponse) {
  callback(null, {result: jsonResponse.id});
}).catch(callback);

url = url + "/" + user.result;

var firstName = inputData.first
data = JSON.stringify({"firstname":firstName});

//Second fetch request (API hit) for giving the user a first name
var nameFirst = fetch(url, {method: "PATCH", headers: headers, body: data}).then(function(binaryResponse) {
  return binaryResponse.json();
}).then(function(jsonResponse) {
  callback(null, {result: JSON.stringify(jsonResponse)});
}).catch(callback);

var output = {user: user, firstname: nameFirst};
return output;

似乎第二个获取请求从未被执行,但第一个获取请求正在执行。有没有办法让这些获取请求按顺序成功执行?

【问题讨论】:

    标签: javascript fetch zapier


    【解决方案1】:

    您在这里感到困惑的根源在于您使用的是一种非常古老的现有异步函数样式。当callback 运行时,函数退出并且你的第二个请求永远不会被调用。相反,您应该使用await,这是编写异步 JS 代码的更好方法。

    Zapier 文档中仍然提到callback,但它也指出await 可用(请参阅here)。

    试试这样的:

    const headers = {
      Authorization: "Bearer 22ef59a2eb2a6939f5bd26bb43ff8b2d4d9b24ab",
      "Content-Type": "application/json",
    };
    const url = "https://us-east1.ironwifi.com/api/users";
    
    // User request setup
    const username = inputData.name;
    const userBody = JSON.stringify({ username: username });
    
    // First fetch request (API hit) for creating a user in IronWifi
    const userResponse = await fetch(url, {
      method: "POST",
      headers,
      body: userBody,
    });
    const userData = await userResponse.json();
    // do error checking?
    
    // Name request setup
    const nameUrl = `${url}/${userData.id.result}`; // double check .id.result
    
    const firstname = inputData.first;
    const nameBody = JSON.stringify({ firstname });
    
    // Second fetch request (API hit) for giving the user a first name
    const nameResponse = await fetch(url, {
      method: "PATCH",
      headers,
      body: nameBody,
    });
    const nameData = await nameResponse.json();
    // do error checking?
    
    return { user, firstname };
    

    该代码可能无法直接使用 - 我不知道实际的响应是什么样的。但是,它应该能让你朝着正确的方向前进。


    另外,您应该重置您的 API 密钥 (22ef59...) 并审核它的任何使用情况。如果它是一个有效的令牌,任何阅读此问题的人都可以使用它。

    【讨论】:

      猜你喜欢
      • 2021-08-01
      • 2018-12-27
      • 2016-07-03
      • 2018-10-29
      • 1970-01-01
      • 2020-01-30
      • 2019-07-06
      • 2018-07-31
      • 2017-09-24
      相关资源
      最近更新 更多