2017-01-01 50 views
1

我不熟悉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!'); });'' –

回答

0

與 '通用數據' 在readvalus.js替換 '通用數據'

相關問題