2016-07-13 9 views
-1

Probleme beim Arbeiten mit Anfrage- und asynchronen NPMs, neu auch in JS.Async und Request, Ergebnisse zurückgeben

var queries = getURLS(); 

    async.map(queries, function(url, callback) { 
     var options = { 
      url: url, 
      proxy: config.ProxuURL + ":" + config.ProxyPort, 
      headers: { 
       'SwitchProxy': location, 
       'User-Agent': getUA() 
      }, 
      resolveWithFullResponse: true 
     }; 

     request(options, function (err, res, body){ 
      if (!err && res.statusCode === 200) { 
       var urls = []; 

       var $ = cheerio.load(body); 

       $('h3.r a').each(function(i) { 
        urls[i] = getDomain($(this).attr('href')); 
       }); 

       //How do I return urls so I can access it outside of the async loop? 
      } 
     }); 
    }); 

Wenn ich console.log (URLs) Ich erhalte 10 Arrays von Domain-Namen, möchte ich sie alle in einer Masterliste aggregieren, so kann ich durch sie analysieren.

Antwort

0

Alles, was Sie tun müssen, ist eigentlich die Callback-Funktion zu Ihrem async.map() hinzufügen und suchen Sie dort nach den Ergebnissen. Damit Ihre Rückruffunktion die Werte abrufen kann, müssen Sie außerdem den Rückruf mit den Daten zurückgeben, die Sie an dem Punkt zurückgeben möchten, an dem Sie sie zurückgeben möchten.

var queries = getURLS(); 

async.map(queries, function(url, callback) { 
    var options = { 
     url: url, 
     proxy: config.ProxuURL + ":" + config.ProxyPort, 
     headers: { 
      'SwitchProxy': location, 
      'User-Agent': getUA() 
     }, 
     resolveWithFullResponse: true 
    }; 

    request(options, function (err, res, body){ 
     if (err) 
      return callback(err, null);   
     if (!err && res.statusCode === 200) { 
      var urls = []; 

      var $ = cheerio.load(body); 

      $('h3.r a').each(function(i) { 
       urls[i] = getDomain($(this).attr('href')); 
      }); 

      // return urls back to async.map() 
      return callback(null, urls); 
     }  
    }); 
}, function(err, results) { 
    if (err) 
     console.log(err); 
    else 
     console.log(results) // Array of all URL Arrays returned from each queries iteration 
}); 
Verwandte Themen