2016-03-22 11 views
0

Ich kann nicht scheinen, dies herauszufinden. Ich verwende Node, Express und Bluebird für Versprechungen. Was ich versuche, ist ein Objekt innerhalb einer Schleife hinzuzufügen. Wenn ich das Protokoll logge, erhalte ich ein leeres Objekt.Node.js Hinzufügen zu einem Objekt innerhalb einer Schleife

Gehe ich das alles falsch?

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); 
 
});

Antwort

2

Sie versuchen, melden Sie sich zu trösten, bevor die Arbeit abgeschlossen ist. Sie müssen warten, bis die Verschachtelung der Versprechungen abgeschlossen ist.

, das zu tun, sammeln Sie alle Versprechungen in ein Array und verwenden Promise.all zu wissen, wann sie alle


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

Danke, Derick abgeschlossen sind! Ich habe Ihre Änderungen und bekomme diesen Fehler: 'Unhandled Ablehnung TypeError: erwartet ein Array oder ein iterables Objekt aber bekam [Objekt Null]' – twobergs

+0

oops - hatte mehrere Tippfehler drin. Ich habe den Code aktualisiert, nur um den Promise.all-Aufruf zu korrigieren, und einen Rechtschreibfehler von "promiseList". hoffentlich wird es jetzt funktionieren –

+0

Das hat funktioniert. Danke für Ihre Hilfe! – twobergs

Verwandte Themen