如何修复'回调不是功能错误'?

时间:2017-02-16 06:49:01

标签: javascript callback

我尝试使用回调函数的简单示例,但它有一些问题。

(function ddd () {
  const categories = [];
  const url2 = 'http://www.example.com';

  const callback2 = function (res) {
    console.log(res);
  }

  const callback = function (res,callback2) {
    res.products.forEach((el) => {
      categories.push({itemLabel: el.id, categoryLabel: 'gifts'});
    });
    callback2(categories);
  };

  getData(url2, callback);
})();

控制台说callback2 is not a function

我尝试了console.log(typeof(callback2)),并说callback2是一个函数。

那么,这种情况有什么问题?当我只输入console.log(categories)时,效果很好。

3 个答案:

答案 0 :(得分:2)

你必须做这样的事情。

getData(url2, callback(result, callback2));

答案 1 :(得分:1)

你必须做这样的事情: 重要的是将第一个函数中已存在的第二个回调作为参数传递。

如果您不知道该怎么做,您可以将该函数存储在全局变量中,但它不是真正的回调。



(function ddd () {
  const categories = [];
  const url2 = 'http://www.example.com';

  const callback2 = function (res) {
    console.log(res);
  }

  const callback = function (res,callback2) {
    res.products.forEach((el) => {
      categories.push({itemLabel: el.id, categoryLabel: 'gifts'});
    });
    callback2(categories);
  };
	function getData(url, callback, callback2) {
   	callback({products: [{id: 10}]}, callback2);
  };
  getData(url2, callback, callback2);
})();




使用Global Callback2:



(function ddd () {
  const categories = [];
  const url2 = 'http://www.example.com';

  const callback2 = function (res) {
    console.log(res);
  }

  const callback = function (res) {
    res.products.forEach((el) => {
      categories.push({itemLabel: el.id, categoryLabel: 'gifts'});
    });
    callback2(categories);
  };
	function getData(url, callback) {
   	callback({products: [{id: 10}]});
  };
  getData(url2, callback);
})();




答案 2 :(得分:0)

正如我所见,你将callback2作为函数回调的参数传递,然后不加载全局定义,他使用自己的回调范围定义。

{{1}}

从params方法中删除callback2将调用之前定义的callback2,并且不会在自己的范围内找到