在函数中使用fetch()导致“输出未定义”

时间:2016-01-22 01:21:47

标签: javascript asynchronous zapier fetch-api

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

注意任何答案:我自己和我可用的程序员团队不是JavaScript专家,但我们理解大多数概念。

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

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

  

ReferenceError:输出未定义为函数

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为我预定义了'输入'和'输出'变量。 'output'最初是Null,值必须由代码设置。

2 个答案:

答案 0 :(得分: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();
        });
}

答案 1 :(得分:0)

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

我发现如果我使用提取调用通过Zapier&#34;回调&#34;异步返回?从if语句里面的方法,然后我不得不使用&#34; callback&#34;也从脚本中的所有其他控制路径返回,否则我会收到&#34; ReferenceError:输出未定义函数&#34;。我不知道为什么会这样,但确实如此。

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

    //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});
}