回调函数在从另一个文件中的函数调用时返回未定义的值

时间:2017-01-01 08:22:51

标签: javascript node.js

我是javascript / nodeJS编程的新手。我想从excel文件中读取一个单元格值,我可以使用excelJS API来完成,我需要将此单元格值返回给anothor文件中的函数。因为它是一个异步操作,我使用回调来处理它,但不知何故回调函数返回未定义的值。即使在努力之后我也无法修复它。如果有人为我提供解决方案,对我来说将是一个很大的帮助。我有两个.js文件,第一个是readvalues.js文件,另一个是mycallback.js文件。我从readvalue函数调用mycallback函数,该函数在另一个带有三个参数的文件中(第一个是sheetName,第二个是ColumnName,第三个是回调函数)。当我打印从mycallback函数收到的值时,它显示未定义。以下是代码段:

readvalus.js

var mycallback = require('./mycallback.js');        
var Excel = require('exceljs'); 
function readvalues(){
    console.log('Calling mycallback Function');
    mycallback('General Data', 'Name', function(name){
        console.log('Received name from mycallback function = ' +name); //displays value of name as undefined
    }); 
    console.log('Finished calling mycallback Function');
}
readvalues();

mycallback函数(内部调用另一个名为getData的函数)。

var Excel = require('exceljs');
var mycallback = function(sheetName, columnName,callbackOne) {
    getData(sheetName, columnName, function(value){
        console.log('Data received from getData Function = '+value); //prints value as undefined.
        callbackOne(value);
    }); 
}

function getData(sheetName, columnName, callbackTwo){
    var workbook = new Excel.Workbook();
    var filename = './data.xlsx';
    workbook.xlsx.readFile(filename) //function of exceljs API
    .then(function(){
    var worksheet = workbook.getWorksheet(sheetName);
    var row = worksheet.getRow(1).values;
    for(var i=1; i<row.length; i++){
        if(row[i] === columnName){
            var rowVal = worksheet.getRow(2).values;
            var data = rowVal[i];
        }
    }
    console.log('Data passed from getData Function = '+data);   //prints value of data as undefined.
    callbackTwo(data);
    }) 
}
module.exports = mycallback;

注意:当我在mycallback函数中运行mycallback函数(如mycallback(&#39; Common Data&#39;,&#39; Name&#39;)而没有callbackOne)时,它会单独打印预期价值&#34;约翰&#34;完美。

输出:

Outputs

Excel数据 Data which I want to read from the excel

1 个答案:

答案 0 :(得分:0)

替换&#39;一般数据&#39;使用&#39; Common Data&#39;在readvalus.js