我的背景如下:
我有一个变量' qq' - 我想从API调用中为此变量分配数据,一旦分配了数据,我就会在绘制/绑定过程中使用这些数据。
API调用并分配给var' qq'工作正常 - 但我似乎无法使我的回调工作 - 我一直收到错误:callback()不是一个函数
这就是我的代码目前的样子:
var qq = [];
// binding function - to be run after data loader has completed
function sayIamDone() {
alert('I Am Done');
// do data bindings with qq
}
// load data from api into var qq
function dataLoader(inp,callback) {
let url = 'http://localhost:65232/api/layercolor/' + inp;
console.log(url);
$.getJSON(url,function(result) {
qq = eval('({' + result + '})');
//console.log(qq);
callback();
});
}
// call data loader
dataLoader('Prov', sayIamDone());

从上面我在chrome控制台中收到以下错误:
未捕获的TypeError:回调不是函数
我尝试了以下内容 - 这似乎有效:
dataLoader('Prov', function () { alert('I Am Done');});

但它在我的上下文中并不理想,因为我想调用dataLoader(' Prov',XXX())其中XXX()可能是使用qq中新加载的值的许多不同函数
有关我错过船的地方的任何建议吗?
答案 0 :(得分:1)
变化:
dataLoader('Prov', sayIamDone());
到
dataLoader('Prov', sayIamDone);
,因为:
sayIamDone
是函数,sayIamDone()
是函数的结果。通常,sayIamDone()
是undefined
或sayIamDone
中的返回值;
想要使用参数吗?你可以这样做:
dataLoader('Prov', callFunc(n));
function callFunc(arg) {
return function() {
sayIamDone(arg);
};
}
或更多参数?您可以通过spread
执行此操作dataLoader('Prov', callFunc(n));
function callFunc(...arg) {
return function() {
sayIamDone.apply(null, arg);
};
}
答案 1 :(得分:1)
通过运行dataLoader('Prov', sayIamDone());
,您将dataLoader
sayIamDone
函数的结果传递给dataLoader('Prov', sayIamDone);
。你必须传递而不用括号才能传递函数本身。
buildNodeHierarchy