3

我已经使用 Zapier 几个星期了,按照正常情况,随着我们构建每个功能,我们的需求变得更加复杂。因此,我目前在“Zapier 的代码”中遇到了一些 JavaScript 问题。

任何答案请注意:我自己和我所拥有的程序员团队都不是 JavaScript 专家,但我们确实了解大多数概念。

目标:仅当 javascript 的输入为真时才进行 fetch() 调用。

问题:当代码中包含 fetch() 时,Zapier 总是返回“未定义的输出”。

ReferenceError: output is not defined theFunction

ie:整体代码结构还可以,我使用fetch()的方式和返回处理方式不行。

我已经尝试了无数种变体,并在这里使用了一些很棒的帖子,但没有解决这个问题。

简化的代码如下所示:

 //This does the Fetch:
function doFetch(urlAddress) {
    console.log("2. Doing Fetch");
    return fetch(urlAddress)
        .then(function(res) {
            return res.text();
        })
        .then(function(response) {
            //Hardcode a return.
            console.log("3. Returning Response");
            return response.json();
        });
}

if (input.emailHasChanged == "true") 
{
    //Do Something
    console.log("1. Updating Email");
    doFetch(urlAddress)
        .then(function(response) {
            //Do something with Reponse.
            console.log("4. Doing Something: ", response);
            callback(null, response);
        });
}
else
{
    //Do Nothing
    console.log("1. Not Updating email");
    output = {id: 2};
}

我相信这是我从 fetch() 或 JavaScript 的异步性质返回的方式。

注意:Zapier 为我预定义了“输入”和“输出”变量。“输出”最初为 Null,并且必须由代码设置一个值。

4

2 回答 2

2

这个函数不正确:

//This does the Fetch:
function doFetch(urlAddress) {
    console.log("2. Doing Fetch");
    return fetch(urlAddress)
        .then(function(res) {
            return res.text();
        })
        .then(function(response) {
            //Hardcode a return.
            console.log("3. Returning Response");
            return response.json(); // <-- response is an string. This method is not defined.
        });
}

fetch().text()在响应对象中解析,该对象具有分别使用和将正文读取为文本或 JSON 的方法.json()。的解析值.text()string没有方法的.json()。如果您想简单地将正文解析为 JSON,请使用:

//This does the Fetch:
function doFetch(urlAddress) {
    console.log("2. Doing Fetch");
    return fetch(urlAddress)
        .then(function(res) {
            return res.json();
        });
}
于 2016-01-26T11:49:04.630 回答
0

对于遇到此问题的其他人:

我发现如果我使用 fetch 调用从 if 语句中通过 Zapier 的“回调”方法异步返回,那么我必须使用“回调”来从脚本中的所有其他控制路径返回,否则我会收到“ReferenceError :输出未定义函数”。我不知道为什么这有效,但确实有效。

例如,这样的事情对我有用:

    //This does the Fetch:
function doFetch(urlAddress) {
    console.log("2. Doing Fetch");
    return fetch(urlAddress)
        .then(function(res) {
            return res.text();
        });
}

if (input.emailHasChanged == "true") 
{
    //Do Something
    console.log("1. Updating Email");
    doFetch(urlAddress)
        .then(function(response) {
            //Do something with Reponse.
            console.log("4. Doing Something: ", response);
            callback(null, response);
        });
}
else
{
    //Do Nothing
    console.log("1. Not Updating email");
    //output = {id: 2};
    //Use 'callback' instead of output
    callback(null, {id: 2});
}
于 2017-11-08T16:41:53.343 回答