How to make node js to wait for function to execute (even if it take time) and then execute the next statement . for me problem is for loop prints all urls first it does nt wait for require request function to check each url the http response. It just prints all urls. beacuse of this i am getting the error
console.log(dd[i]['loc'][0]); 
                 ^
TypeError: Cannot read property 'loc' of undefined
my full source code is as below
       var hapi = require('hapi');
    var glue = require('glue');
    var joi = require('joi');
    var handlebars = require('handlebars');
    var strop = require('string');
    var inert = require('inert');
    var async = require('async');
    var poop = require('poop');
    var bell = require('bell');
    var nconf = require('nconf');
    //xml parser starts
    var fs = require('fs'),
        xml2js = require('xml2js');
    var parser = new xml2js.Parser();
    fs.readFile('sitemapscene1.xml', function(err, data) {
    var count = 0;
    var a=0;
    var b=0;
    var c=0;
    var d=0;
    var e=0;
    var f=0;
    var g=0;
    var h=0;
    //parsing inside url starts
    var parseString = require('xml2js').parseString;
        parser.parseString(data, function (err, result) {
            ff = result;
            dd = ff['urlset']['url'];
            for (i =0; i< dd.length; i++){
             console.log(dd[i]['loc'][0]);
    //server reuest and checking
    var request = require('request');
    request(dd[i]['loc'][0], function (error, response, body) {
      if (!error && response.statusCode == 200) {
        console.log(dd[i]['loc'][0]); 
        console.log("This url http response is 200");
        count=count+1;
        console.log(count);
      }
    })
    }
    console.log("Total number of urls in this sitemap");
            console.log(dd.length);
            });
        });
    //xml parser ends
My full error code is 
    Total number of urls in this sitemap
22569
    console.log(dd[i]['loc'][0]); 
                     ^
TypeError: Cannot read property 'loc' of undefined
    at Request._callback 
    at Request.self.callback
    at emitTwo (events.js:87:13)
    at Request.emit (events.js:172:7)
    at Request.<anonymous> 
    at emitOne (events.js:77:13)
    at Request.emit (events.js:169:7)
    at IncomingMessage.<anonymous> 
    at emitNone (events.js:72:20)
    at IncomingMessage.emit (events.js:166:7)
My actual full code
 var hapi = require('hapi');
var glue = require('glue');
var joi = require('joi');
var handlebars = require('handlebars');
var strop = require('string');
var inert = require('inert');
var async = require('async');
var poop = require('poop');
var bell = require('bell');
var nconf = require('nconf');
var async = require('async');
//xml parser starts
var fs = require('fs'),
    xml2js = require('xml2js');
var parser = new xml2js.Parser();
fs.readFile('sitemapscene1.xml', function(err, data) {
var count = 0;
var a=0;
var b=0;
var c=0;
var d=0;
var e=0;
var f=0;
var g=0;
var h=0;
//parsing inside url starts
var parseString = require('xml2js').parseString;
    parser.parseString(data, function (err, result) {
        ff = result;
        dd = ff['urlset']['url'];
        console.log("Total number of urls in this sitemap");
        console.log(dd.length);
        for (i =0; i< dd.length; i++){
         console.log(dd[i]['loc'][0]);
//sending to server to get response
var request = require("request");
request(dd[i]['loc'][0], function(error, response, body) {
    //console.log(response.statuscode);
if (!error && response.statusCode == 200) {
    count=count+1;
   console.log("Number of pages with responese.statuscode 200 is");
    console.log(count); 
    var ddddd = "Number of pages with responese.statuscode 200 is " + count + " " + dd[i]['loc'][0]
// output is wriiten in output.txt file start here
fs = require('fs');
fs.writeFile('output.txt', ddddd, function (err) {
  if (err) return console.log(err);
  console.log('Hello World > output.txt');
});
// output is wriiten in output.txt file ends here
    } else if ( error && response.statusCode == 400 ) {
         a=a+1;
    console.log("Number of pages with responese.statuscode 400 is");
    console.log(a);
    var ddddd = "Number of pages with responese.statuscode 200 is " + count + " " + dd[i]['loc'][0]
// output is wriiten in output.txt file start here
fs = require('fs');
fs.writeFile('output.txt', ddddd, function (err) {
  if (err) return console.log(err);
  console.log('Hello World > output.txt');
});
// output is wriiten in output.txt file ends here
    }else if ( error && response.statusCode == 402 ) {
         b=b+1;
    console.log("Number of pages with responese.statuscode 402 is");
    console.log(b);
    var ddddd = "Number of pages with responese.statuscode 200 is " + count + " " + dd[i]['loc'][0]
// output is wriiten in output.txt file start here
fs = require('fs');
fs.writeFile('output.txt', ddddd, function (err) {
  if (err) return console.log(err);
  console.log('Hello World > output.txt');
});
// output is wriiten in output.txt file ends here
    }else if ( error && response.statusCode == 403 ) {
         c=c+1;
    console.log("Number of pages with responese.statuscode 403 is");
    console.log(c);
    var ddddd = "Number of pages with responese.statuscode 200 is " + count + " " + dd[i]['loc'][0]
// output is wriiten in output.txt file start here
fs = require('fs');
fs.writeFile('output.txt', ddddd, function (err) {
  if (err) return console.log(err);
  console.log('Hello World > output.txt');
});
// output is wriiten in output.txt file ends here
    }else if ( error && response.statusCode == 404 ) {
         d=d+1;
    console.log("Number of pages with responese.statuscode 404 is");
    console.log(d);
    }else if ( error && response.statusCode == 500 ) {
         e=e+1;
    console.log("Number of pages with responese.statuscode 500 is");
    console.log(e);
    var ddddd = "Number of pages with responese.statuscode 200 is " + count + " " + dd[i]['loc'][0]
// output is wriiten in output.txt file start here
fs = require('fs');
fs.writeFile('output.txt', ddddd, function (err) {
  if (err) return console.log(err);
  console.log('Hello World > output.txt');
});
// output is wriiten in output.txt file ends here
    }else if ( error && response.statusCode == 502 ) {
         f=f+1;
    console.log("Number of pages with responese.statuscode 502 is");
    console.log(f);
    var ddddd = "Number of pages with responese.statuscode 200 is " + count + " " + dd[i]['loc'][0]
// output is wriiten in output.txt file start here
fs = require('fs');
fs.writeFile('output.txt', ddddd, function (err) {
  if (err) return console.log(err);
  console.log('Hello World > output.txt');
});
// output is wriiten in output.txt file ends here
    }else if ( error && response.statusCode == 504 ) {
         g=g+1;
    console.log("Number of pages with responese.statuscode 504 is");
    console.log(g);
    var ddddd = "Number of pages with responese.statuscode 200 is " + count + " " + dd[i]['loc'][0]
// output is wriiten in output.txt file start here
fs = require('fs');
fs.writeFile('output.txt', ddddd, function (err) {
  if (err) return console.log(err);
  console.log('Hello World > output.txt');
});
// output is wriiten in output.txt file ends here
    } else   {
         h=h+1;
    console.log("Number of pages with error is");
    console.log(h);
    var ddddd = "Number of pages with responese.statuscode 200 is " + count + " " + dd[i]['loc'][0]
// output is wriiten in output.txt file start here
fs = require('fs');
fs.writeFile('output.txt', ddddd, function (err) {
  if (err) return console.log(err);
  console.log('Hello World > output.txt');
});
// output is wriiten in output.txt file ends here
    }
});
        }
        //console.log("Number of urls,in this site map");
        //console.log(dd.length); //number of urls
    });
});
//xml parser ends
This is the code which crash the server, i think i made mistake in code than server run out of memory
    var hapi = require('hapi');
var glue = require('glue');
var joi = require('joi');
var handlebars = require('handlebars');
var strop = require('string');
var inert = require('inert');
var async = require('async');
var poop = require('poop');
var bell = require('bell');
var nconf = require('nconf');
var async = require('async');
//xml parser starts
var fs = require('fs'),
    xml2js = require('xml2js');
var parser = new xml2js.Parser();
fs.readFile('sitemapscene1.xml', function(err, data) {
var count = 0;
var a=0;
var b=0;
var c=0;
var d=0;
var e=0;
var f=0;
var g=0;
var h=0;
//parsing inside url starts
var parseString = require('xml2js').parseString;
    parser.parseString(data, function (err, result) {
        ff = result;
        dd = ff['urlset']['url'];
        for (i =0; i< dd.length; i++){
         console.log(dd[i]['loc'][0]);
//server reuest and checking
var asyncRequests = [];
var request = require('request');
dd.forEach(function(ddElement){
    asyncRequests.push(function(callback){
        request(ddElement.loc[0], function(error, response, body) {
            if (!error && response.statusCode == 200) {
                return callback(null, 1);
            }
        callback();
        });
    });
});
async.parallel(asyncRequests, function afterStatement(err, results){
    var count = 0;
    for (var i = 0; i < results.length; i ++){
                if (results[i]){
            count += results[i];
        }
    }
});
}
console.log("Total number of urls in this sitemap");
        console.log(dd.length);
        });
    });
//xml parser ends
 
    