2017-03-23 3 views
-1

変数出力を別のノードjsファイルにエクスポートしようとしています。しかし、fs read関数の非同期タスクのため、出力変数をエクスポートできません。非同期ノードjsファイルの変数を他のnodejsファイルにエクスポートできません

私は間違っている箇所を理解できません。 私は出力を未定義にしています。 誰でも私に間違いを知らせることができます。あなたはモジュールBで関数を呼び出すことになるでしょうモジュールAから

var parseString = require('xml2js').parseString; 
    var xml = ''; 
    var fs = require('fs'); 
    var async = require('async'); 
    var exports = module.exports = {}; 
    var output; 
    var out; 

    async.series([ 
    function (callback) { 
    fs.readFile('./sample.xml', 'utf8', function(err, data) { 
     parseString(data, function(err, result) { 
      xml = result; 
      var partyNames = xml["TXLife"]["TXLifeRequest"][0]["OLifE"][0]["Party"]; 

      for (var i = 0;i < partyNames.length;i++) { 
       var firstName, lastName, sex, dob, zip, riskScore, scriptCheckScore, questCheckScore; 
       if (partyNames[i]["PartyTypeCode"][0]["_"] == "Person" && partyNames[i]["Person"][0]["LastName"] == "JAYME") { 
        if (partyNames[i]["Person"][0].hasOwnProperty("FirstName")) { 
         firstName = partyNames[i]["Person"][0]["FirstName"]; 
        } 

        if (partyNames[i]["Person"][0].hasOwnProperty("LastName")) { 
         lastName = partyNames[i]["Person"][0]["LastName"]; 
        } 

        if (partyNames[i]["Person"][0].hasOwnProperty("BirthDate")) { 
         dob = partyNames[i]["Person"][0]["BirthDate"]; 
        } 

        if (partyNames[i]["Person"][0].hasOwnProperty("Gender") && partyNames[i]["Person"][0]["Gender"][0].hasOwnProperty("_")) { 
         sex = partyNames[i]["Person"][0]["Gender"][0]["_"] 
        } 

        if (partyNames[i].hasOwnProperty("Address") && partyNames[i]["Address"][0].hasOwnProperty("Zip")) { 
         zip = partyNames[i]["Address"][0]["Zip"][0]; 
        } 

        if (partyNames[i].hasOwnProperty("Risk") && partyNames[i]["Risk"][0].hasOwnProperty("OLifEExtension") && 
         partyNames[i]["Risk"][0]["OLifEExtension"][5].hasOwnProperty("RiskScoring") && partyNames[i]["Risk"][0]["OLifEExtension"][5]["RiskScoring"][0].hasOwnProperty("RiskScore")) { 

         riskScore = partyNames[i]["Risk"][0]["OLifEExtension"][5]["RiskScoring"][0]["RiskScore"][0]["QuantitativeScore"][0]; 
         scriptCheckScore = partyNames[i]["Risk"][0]["OLifEExtension"][5]["RiskScoring"][0]["RiskScore"][1]["QuantitativeScore"][0]; 
         questCheckScore = partyNames[i]["Risk"][0]["OLifEExtension"][5]["RiskScoring"][0]["RiskScore"][2]["QuantitativeScore"][0] 
         console.log("Risk score ",riskScore); 
         console.log("Script check score ",scriptCheckScore); 
         console.log("questCheckScore ",questCheckScore); 
        } 
        output = firstName + " " + lastName + " " + dob + " " + sex + " " + zip; 
        callback(null, output); 
       } 
      } 

     }) 
    }); 
    }, 

    function (callback){ 
     out = output; 
     //module.exports.out = output; 
     console.log("second"); 
     callback(null, out); 
    } 
    ], 

    function(err, result) { 
     console.log("result", result); 
     exports.out = result; 
    } 
    ); 
+0

は私の問題を解決しました。 –

答えて

0

コールバック関数をとる(のはgetFileContentそれを呼びましょう) - このような多分何か:モジュールAで今

var getFileContent(callback) { 
    : 
    // async operation to get content 
    callback(null, results); // assuming no error 
    : 
} 

を呼び出しますこれは次のようなものです:

var B = require('B'); // whatever module B reference is 

B.getFileContent(function(err, result) { 
    if (err) { 
    : 
    } else { 
    // do something with result 
    } 
}); 
+0

getFileContentは関数ではありませんか? –

+0

同じファイルで使用していても別のファイルに渡すことができない場合は、出力を取得しています。 –

+0

呼び出しが非同期であるため、コールバックを介して情報を渡す必要があります。エクスポートするだけでは、データはまだ使用できないため、未定義になります。したがって、 'getFileContent()'は、コールバックをパラメータとして取る関数です。データが利用可能になった時点で(ある時間後に)そのコールバックを渡すことができます。 – rasmeister

0

関数を非同期で呼び出すので、今は何もエクスポートしていないので、関数をエクスポートする必要があります空の物語を教えてください。例えば:あなたのasync.seriesファイルでメインファイルで

var awesomeExports = require('seriesFile'); 

awesomeExports((err, value) => { 
    if(err) //Do something with error. 
    //Do something with value. 
}) 

//All your includes. 

module.exports = (err, callback) => { 
    async.series([ 
     //Your async.series functions in the array. 
    ], 
    function(err, result) { 
     callback(err, result); 
    } 
); 
} 
関連する問題