2017-03-23 2 views
-1

Ich versuche, Variablenausgabe in eine andere Knoten-Js-Datei zu exportieren. Aber aufgrund der asynchronen Aufgabe der fs read-Funktion kann ich die Ausgabevariable nicht exportieren.Nicht möglich, Variablen in Async-Knoten-JS-Dateien zu anderen Nodejs-Dateien zu exportieren

Ich kann nicht verstehen, wo ich Fehler mache. Ich bekomme gerade als undefiniert ausgegeben. Konnte jemand mich den Fehler wissen lassen.

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

mein Problem gelöst. –

Antwort

0

von Modul A eine Funktion in Modul B aufrufen wollen (wir es getFileContent nennen), die eine Callback-Funktion nimmt - vielleicht so etwas wie dieses:

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

nun in Modul A, rufen dies - etwa so:

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

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

getFileContent ist keine Funktion? –

+0

Ich bekomme die Ausgabe, wenn ich in der gleichen Datei verwende, aber ich kann nicht zu einer anderen Datei übergeben. –

+0

Da der Aufruf asynchron ist, müssen Sie die Informationen über einen Rückruf übergeben. Wenn Sie nur exportieren, sind die Daten noch nicht verfügbar, so dass Sie undefiniert werden. 'GetFileContent() 'ist also eine Funktion, die Sie erstellen würden, die einen Rückruf als Parameter akzeptiert und wenn die Daten verfügbar sind (einige Zeit später), kann sie durch diesen Rückruf weitergeleitet werden. – rasmeister

0

Sie exportieren nichts gerade jetzt, weil Sie eine Funktion asynchron anrufen, so dass Sie Ihre Funktion in exportieren werden sollen Spitze eines leeren Gegenstandes. Zum Beispiel:

In Ihrer Hauptdatei

var awesomeExports = require('seriesFile'); 

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

In Ihrer async.series Datei

//All your includes. 

module.exports = (err, callback) => { 
    async.series([ 
     //Your async.series functions in the array. 
    ], 
    function(err, result) { 
     callback(err, result); 
    } 
); 
} 
Verwandte Themen