如何包装异步函数以避免代码重复



我试图通过将这段代码包装在一个单独的函数中来避免代码重复。问题是 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 对象创建移近使用它的位置,但这只是一个样式首选项。 当然,如果您愿意,您可以将其放回室外。

最新更新