繁体   English   中英

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

[英]How to wrap an asynchronous function to avoid code duplication?

我试图通过将代码包装在单独的函数中来避免代码重复。 问题是d3.json是异步的,因此有时会返回一个空的info对象。 有没有办法避免代码重复?

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回调函数中将信息对象的创建移到了更靠近它使用的位置,但这只是样式首选项。 当然,您可以根据需要将其放回户外。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM