我不熟悉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函數的功能分別是印刷期望值 「約翰」 莫屬。
輸出:
Excel數據 Data which I want to read from the excel
替換 '一般數據' 與「通用數據'in readvalus.js – hawk
是的,它在用'通用數據'取代'通用數據'後正在工作。我實際上需要它來使用量角器工具來實施數據驅動的測試。 –
@ 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!'); });'' –