我试图通过将这段代码包装在一个单独的函数中来避免代码重复。问题是 d3.json 是异步的,因此有时会返回一个空的信息对象。有没有办法避免这里的代码重复?
function getData(endpoint){
//long stuff
var info = {"succeeded": 1,"datum":[], "message":""};
d3.json(endpoint, function(error, data) {
//long stuff
info.datum = data;
return info;
});
return info;
}
一旦你进入异步调用的世界,你就再也回不来了,所以如果不使包装函数异步,就没有办法做到这一点。 这样的事情可以工作:
function getData(endpoint, callback) {
d3.json(endpoint, function(error, data) {
var info = {
succeeded: 1,
data: data,
message: ""
};
callback(info);
});
};
您的回调函数将接受一个参数,该参数将成为您的"info"对象。
请注意,我将 d3 回调函数中的 info 对象创建移近使用它的位置,但这只是一个样式首选项。 当然,如果您愿意,您可以将其放回室外。