0

How can I assign function to global variable in javascript node.js? This function is for loading data from xml. And I want to use this data as a array but my globalDataxml is undefinded.

Code:

var fs = require('fs');
var parseString = require('xml2js').parseString;

function loadXml(cb)
        {
            fs.readFile('data-xml/test_data.xml', function (err, data)
            {
                parseString(data, function (err, result)
                {
                    cb(result.xml.record);
                });
            });
        }

        var globalDataxml = loadXml(function (yourRecods) {
            return yourRecods;
        });
DiPix
  • 5,755
  • 15
  • 61
  • 108

1 Answers1

1

Just asign your variable like this :

var fs = require('fs');
var parseString = require('xml2js').parseString;

function loadXml(cb) {
    fs.readFile('data-xml/test_data.xml', function(err, data) {
        parseString(data, function(err, result) {
            cb(result.xml.record);
        });
    });
}
var globalDataxml = null;
loadXml(function(yourRecods) {
    globalDataxml = yourRecods;
});

You can't the way yuou do because fs.readFile is async.

Warning

This way will not work if you want to use your variable after (always because of the async)

Better way to do it :

var fs = require('fs');
var parseString = require('xml2js').parseString;

function loadXml() {
    return new Promise((resolve, reject) => {
      fs.readFile('data-xml/test_data.xml', function(err, data) {
          if(err)return reject(err);
          parseString(data, function(err, result) {
            if(err)return reject(err);
            resolve(result.xml.record);
          });
      });
    });
}
loadXml().then(globalDataxml => {
  //do what you want with it
}).catch(err => console.log(err));
Community
  • 1
  • 1
jaumard
  • 8,202
  • 3
  • 40
  • 63