2016-05-08 20 views
0

私はNodeJSから始めます。私はNodeJSループを使ってやってみようとしています:私の結果をエクスプレステンプレートに送ってください。nodejsリクエスト、ループ&約束

私は多くのlibと約束を試みましたが、どれも働いていませんでした。ノードはループを終了する前に "then"を実行します...

ここで最後に試してみましょう。どうもありがとう。

[...] 
//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({...の代わりに、あなたはそれが今、あなたの関数(pveId)はundefinedを返しますので、あなたのPromise.mapがちょうど未定義の代わりに実際の約束のの束を登録する必要があり、単にrequest.get({

方法にする必要があります。

また、約束をコールバックと混在させないでください。要求の代わりにrequest-promiseを使用してください。