2016-05-08 2 views
0

Я только начинаю с NodeJS. Я пытаюсь сделать с NodeJS цикл и только тогда: отправить мой результат в экспресс-шаблон.nodejs request, loop & prom

Я пробовал много lib и обещаний, но никто из них не работал. Узел делает «затем» до окончания цикла ...

Вот моя последняя попытка, вы можете мне помочь? Большое спасибо.

[...] 
//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

Вы не решаете обещания, читаете документы –

+0

Спасибо, я сделал, но не вижу, как это сделать. Можете ли вы показать мне пример? – Gwendoline

ответ

0

Вы должны return request.get({... вместо просто request.get({

так, как вы сейчас ваша функция (pveId) возвращает неопределенное значение, чтобы ваш Promise.map просто регистрирует кучу неопределенных вместо реальных обещаний.

Вы также не должны смешивать обещания с обратными вызовами, вместо запроса используйте запрос-обещание.