回调函数返回未定义

时间:2020-01-20 19:09:29

标签: javascript d3.js design-patterns callback revealing-module-pattern

我正在尝试将return内的object callback function

在以下情况下,console.log()会按预期显示结果

var dVizModule = (function(){
    let dataset;

    function loadData(fileName) {
        dataset = d3.csv(fileName, (data) => {
            dataset = data;
            console.log(dataset);
        });
    };

    return {
        loadData: loadData
    }

})();

dVizModule.loadData("data/time_scale_data.csv")

但是当我尝试在return中使用callback function时,故事就不同了,它返回了undefined

var dVizModule = (function(){
    let dataset;

    function loadData(fileName) {
        dataset = d3.csv(fileName, (data) => {
            dataset = data;
            return dataset;
        });
        // return dataset; or even here!
    };

    return {
        loadData: loadData
    }

})();

console.log(dVizModule.loadData("data/time_scale_data.csv"))

1 个答案:

答案 0 :(得分:0)

由于它是基于回调的工作流程,因此上面的代码将无法工作。 d3.csv是一个异步函数,您只能通过传递给它的回调获取结果,因此即使loadData也需要遵循相同的模式。您只需编写类似的内容即可。

var dVizModule = (function(){
    function loadData(fileName,callback) {
        d3.csv(fileName, (data) => {
            callback(data);
        });
    };
    return {
        loadData: loadData
    }

})();

dVizModule.loadData("data/time_scale_data.csv",(data)=>{
  console.log(data);
})