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機能を実行すると、個別に、それは印刷期待値 "ジョン" 完璧です。
出力:
Excelデータ Data which I want to read from the excel
に '共通データ' と '一般データ' を交換してくださいData in readvalus.js – hawk
はい、「一般データ」を「共通データ」に置き換えて使用しています。私は実際に分度器ツールを使用してデータ駆動型テストを実装するために必要です。 –
@ 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!'); }); ' –