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

问题描述:

我不熟悉javascript/nodeJS编程。我想从excel文件中读取单元格值,我可以使用excelJS API进行操作,并且我需要将此单元格值返回给文件中的某个函数。因为它是一个异步操作,我使用回调来处理它,但不知何故回调函数正在返回未定义的值。即使尝试这么辛苦,我仍然无法修复它。如果有人向我提供解决方案,这对我来说将是一个很大的帮助。我有两个.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函数功能,无需像callbackOne myCallBack函数( '公用数据', '名称'))运行myCallBack函数的功能分别是印刷期望值 “约翰” 莫属。

输出:

Outputs

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

+0

替换 '一般数据' 与“通用数据'in readvalus.js – hawk

+0

是的,它在用'通用数据'取代'通用数据'后正在工作。我实际上需要它来使用量角器工具来实施数据驱动的测试。 –

+0

@ Cnishina或@Hawk: 但是,当我使用它来运行测试脚本时,它会使浏览器无响应并在命令提示符处抛出199错误。 代码片段: 'describe('angularjs homepage',function(){ it('should appied the user',function(){browser.get('http://www.angularjs.org')) ; \t \t myCallBack函数( '公共数据', '名称',函数(名称){ \t元件(by.model( 'YOURNAME'))的SendKeys(名称); \t}); VAR问候=元素(by.binding('yourName')); expect(greeting.getText())。toEqual('Hello John!'); });'' –

与 '通用数据' 在readvalus.js替换 '通用数据'