2016-03-22 13 views
0

私はこれを理解できないようです。私は約束のためにNode、Express、Bluebirdを使っています。私がしようとしているのは、ループ内のオブジェクトに追加することです。私がログをコンソールにすると、空のオブジェクトが得られます。Node.jsループ内のオブジェクトに追加する

私はこれについてすべて間違っていますか?

Promise.props({ 
 
    rewards: db.query("SELECT title, created_by FROM rewards WHERE team_id = '" + team_id + "'") 
 
}).then(function(results) { 
 
    
 
    var rewards = [], 
 
    title = results.rewards[0].title; 
 
    created_by = results.rewards[0].created_by, 
 

 
    for (var i = 0; i < results.rewards.length; i++) { 
 
     Promise.props({ 
 
      user: db.query("SELECT * FROM users WHERE uid = '" + results.rewards[i].created_by + "'") 
 
     }).then(function(result) { 
 
      rewards.push({ 
 
\t   created_by: created_by, 
 
\t   title: title, 
 
\t   username: result.user[0].username 
 
      }); 
 
     }); 
 
    } 
 
    console.log(rewards); 
 
});

答えて

2

あなたは作業が完了する前にログインコンソールにしようとしています。最初に約束のネストループが終わるのを待つ必要があります。

配列にすべての約束を収集し、それを行うと、彼らはすべての


var promiseList = []; 

for (var i = 0; i < results.rewards.length; i++) { 

    // hold the promise in a variable 
    var p = Promise.props({ 
    user: db.query("SELECT * FROM users WHERE uid = '" + results.rewards[i].created_by + "'") 
    }).then(function(result) { 
    rewards.push({ 
    created_by: created_by, 
    title: title, 
    username: result.user[0].username 
    }); 

    // collect the promise 
    promiseList.push(p); 
} 

// wait for all of them to finish 
Promise.all(promiseList).then(function(){ 
    console.log(rewards); 
}); 
+0

おかげで、Derickを完了したときに知ってPromise.allを使用するには! 私は変更を加え、このエラーが発生しています: '処理されなかった拒否TypeError:配列または反復可能オブジェクトを期待していますが、[object Null]を持っています ' – twobergs

+0

oops - そこにいくつかのタイプミスがあります。私はPromise.all呼び出しを修正するためにコードを更新し、 "promiseList"のスペルミスを修正しました。うまくいけばそれは今働くだろう –

+0

それは働いた。ご協力いただきありがとうございます! – twobergs

関連する問題