2017-01-01 11 views
1

javascript/nodeJSプログラミングの新機能です。私はexcelJS APIを使ってできるExcelファイルからセル値を読み込み、このセル値をanothorファイルの関数に返す必要があります。それは非同期操作なので、私はそれを処理するためにコールバックを使用していますが、何とかコールバック関数は未定義の値を返しています。私はそれほど頑張ってもそれを修正することはできません。誰かが私に解決策を提供すれば、私にとって大きな助けになるでしょう。私は2つの.jsファイルを持っています。最初はreadvalues.jsファイルで、その他はmycallback.jsファイルです。私は、3つのパラメータ(最初はsheetName、2番目はColumnName、3番目はコールバック関数)で別のファイルにあるreadvalue関数からmycallback関数を呼び出しています。 mycallback関数から受け取った値を出力すると、未定義と表示されます。 (内部のgetDataと呼ばれる別の関数を呼び出す)別のファイルの関数から呼び出すときに未定義の値を返すコールバック関数

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機能:以下のコードです。

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

に '共通データ' と '一般データ' を交換してくださいData in readvalus.js – hawk

+0

はい、「一般データ」を「共通データ」に置き換えて使用しています。私は実際に分度器ツールを使用してデータ駆動型テストを実装するために必要です。 –

+0

@ Cnishinaまたは@Hawk: しかし、これを使ってTestsスクリプトを実行すると、ブラウザが応答しなくなり、コマンドプロンプトで199エラーが表示されます。 コードスニペット: '(anglejs homepage '、function(){ これは、指定ユーザーに挨拶する必要があります、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

関連する問題