Question: I have this code and I'm not able to create a new array for further use:

```
var request = require("request");
var cheerio = require("cheerio");
var pag = [];
request('http://www.tastez.ro/tv.php?query=sopcast', function(error, response, body) {
  if (error) {
    return console.error('upload failed:', error);
  }

  var $ = cheerio.load(body);
    links = $(".page a"); //use your CSS selector here
    $(links).each(function(i, link){    
      var   sop = $(this).attr('href');
      pag[i] = sop;  //aici pun val gasite in locuri in array
    });
  pag.push(', '); 
});
for (var i=0; i<2; i++){
  console.log(pag[i]);
}

```

When I run the code it is listing `undefined`. But if I put the code like this: 

```
var request = require("request");
var cheerio = require("cheerio");
var pag = [];
request('http://www.tastez.ro/tv.php?query=sopcast', function(error, response, body) {
  if (error) {
    return console.error('upload failed:', error);
  }

  var $ = cheerio.load(body);
  links = $(".page a"); //use your CSS selector here
  $(links).each(function(i, link){    
    var sop = $(this).attr('href');
    pag[i] = sop;  //aici pun val gasite in locuri in array
  });
  pag.push(', ');
  for (var i=0; i<2; i++){
    console.log(pag[i]);
  }   
});

```

Then it is displaying correct result but still `undefined` when i'd like to use it later. 
Can someone help me up with this.

Answer: 
Node.js is async, that means the scrape hasn't finished yet when you go to print out the array.

I'm not totally sure what your end goal is, but here is a way to do what you are trying with minimal changes:

```
var request = require("request");
var cheerio = require("cheerio");
var pag = [];

var scrape = function( callback ) {
    request('http://www.tastez.ro/tv.php?query=sopcast', function(error, response, body) {
      if (error) {
        return console.error('upload failed:', error);
      }

    var $ = cheerio.load(body);
     links = $(".page a"); //use your CSS selector here
      $(links).each(function(i, link){    
        var sop = $(this).attr('href');
        pag[i] = sop;  //aici pun val gasite in locuri in array

      });
    pag.push(', '); 
    if (callback) callback()
    });
}
scrape(function() {
    for (var i=0; i<2; i++){
    console.log(pag[i]);}
})

```
Catalyst is right, the problem is that you are not waiting for the async request call to complete. Here is my solution:

```
function getLinks(callback){

  request('http://www.tastez.ro/tv.php?query=sopcast', function(error, response, body) {
  if (error) {
    callback(new Error('upload failed:', error),null);
  }
  var pag = [];
  var $ = cheerio.load(body);
  links = $(".page a"); //use your CSS selector here
  $(links).each(function(i, link){    
    var sop = $(this).attr('href');
    pag.push(sop);  //aici pun val gasite in locuri in array
  });
  callback(null, pag);

  });

}
getLinks(function(err,links){
  if(err) return console.log(err);
  console.log(links.join(','));
})

```

here I am defining a functions that makes the request call and it accepts a callback in the standard node callback convention on putting the error message as the first parameter and the results as the second parameter. Then calling that method with a callback that will print the results.