【问题标题】:Returned array from function - TypeError: callback is not a function从函数返回的数组 - TypeError:回调不是函数
【发布时间】:2020-03-10 19:07:17
【问题描述】:

我正在编写一个简单的 js 函数来返回使用 fetch API 获取的字符串数组。每当我尝试运行代码时,都会收到此错误:TypeError: callback is not a function

这是我的代码

function getFlavors(franchise, callback) {
    const fetch = require('node-fetch');
    let flavors= [];
    fetch('url', {
        method: 'POST',
        headers: {
            'Content-type': 'application/json'            
        },
        body: JSON.stringify({ "franchise": franchise })
    })
        .then(res => res.json())
        .then(json => {
            json.forEach(element => {
                flavors.push(element.flavor)
            });
            // console.log(flavors);
            callback(flavors);    <-- VALUES DISPLAYED ON CONSOLE
        })
        .catch(error => {
            console.log(error);
        })

}

let benJerrysFlavors = [];
getFlavors("ben&jerrys",benJerrysFlavors);

我可以在控制台上看到值,但是当尝试从函数返回数组时,我收到回调错误

关于可能是什么问题的任何想法?

【问题讨论】:

  • benJerrysFlavors是一个数组[],不能像benJerrysFlavors()那样调用。

标签: javascript arrays node.js callback fetch


【解决方案1】:

应该使用一个回调函数来调用它,将数据传递给它。然后您可以使用返回的数据更新您的数组:

let benJerrysFlavors = [];
getFlavors("ben&jerrys", (ret) => {
    benJerrysFlavors = ret;
});

【讨论】:

  • 在这种情况下我不会被绑定到函数的范围getFlavors()
  • 你试过了吗?所有回调都以这种方式工作,它是一个作为参数传递的函数,然后稍后在另一个函数中执行。否则就不是回调
  • 我试过了,是的,我与函数的作用域相关联。如果我尝试在getFlavors() 之外使用benJerrysFlavors,它会将其视为一个空数组。本质上我只是想获取数据,所以不确定callback 是否是最好的方法
  • 好吧,但是你不能在回调中放置一个控制台注销,这个函数是异步的,所以在回调被执行之前数组不会有值(在 fetch 调用得到响应之后)。如果您不相信我设置了超时并在几秒钟后检查 benJerrysFlavors 值,它将具有该值。问题不在于回调
  • 还有其他方法可以获得异步响应作为您想要的承诺。回调是好的,但这完全取决于你需要什么stackoverflow.com/questions/48365985/…
【解决方案2】:

尝试改变:

callback(flavors)

收件人:

callback.push(...flavors)

【讨论】:

  • 我猜这个解决方案的最终结果将是[ [{}, {}] ]。数组中的数组。
  • @norbitrial,已更新。谢谢jsfiddle.net/05cpg6ry
猜你喜欢
  • 2018-01-22
  • 2018-06-05
  • 2017-03-28
  • 1970-01-01
  • 2017-11-27
  • 1970-01-01
  • 1970-01-01
  • 2019-12-15
相关资源
最近更新 更多