我尝试使用回调函数的简单示例,但它有一些问题。
(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)
时,效果很好。
答案 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,并且不会在自己的范围内找到