2016-05-08 14 views
0

Ich fange gerade mit NodeJS an. Ich versuche mit NodeJS eine Schleife zu machen und erst dann: sende mein Ergebnis an eine Expressvorlage.nodejs Anfrage, Schleife und Versprechen

Ich habe viele Lib und Versprechungen versucht, aber keiner von ihnen hat funktioniert. Knoten tun "dann" vor dem Beenden der Schleife ...

Hier ist mein letzter Versuch, können Sie mir helfen? Danke vielmals.

[...] 
//pveIds contains list of dailies id (object) 
var pveIds = body.pve; 
//init tab, will contain dailies title 
var pveNames = []; 

Promise.map(pveIds, function(pveId) { 
    // Promise.map awaits for returned promises as well. 
    request.get({ 
     url: 'https://api.guildwars2.com/v2/achievements?id=' + pveId.id, 
     json: true 
     }, 
     function(error, response, body) { 
     console.log('log 1: ' + body.name); 
     if (response.statusCode == 200) { 
      return body.name; 
     } 
     }).on('data', function(v) { 
     console.log('log 2: ' + v); 
     return v; 
    }); 
    }).then(function(results) { 
    console.log("done"); 
    console.log(results); 
    console.log("names tab:" + pveNames); 
    res.render('pve.ejs', { 
     names: pveNames 
    }); 
    }); 
+0

Sie lösen nicht Versprechen, lesen Sie Dokumente –

+0

Danke, ich habe aber nicht sehen, wie zu tun. Kannst du mir ein Beispiel zeigen? – Gwendoline

Antwort

0

Sie müssen return request.get({... statt nur request.get({

wie Sie es jetzt haben Ihre Funktion (pveId) gibt undefined so Ihre Promise.map registriert nur einen Haufen undefiniert ist anstelle der tatsächlichen Versprechungen.

Sie sollten auch keine Versprechen mit Callbacks mischen, verwenden Sie Anfrage-Versprechen statt Anfrage.