2016-05-01 6 views
1

Ich versuche zu versprechen, zu warten, bis die Daten vor dem Auslösen der 20 Sekunden setTimeout gefüllt wurde, aber die setTimeout hält nicht die Ausführung der Funktion.Funktion noch ausgeführt, auch mit setTimeout und Versprechen

Irgendwelche Vorschläge zum Forcen finishedGame() warten 20 Sekunden?

var q1 = "SELECT name, pic, link FROM users where id = " + winner; 
connection.query(q1, function (err, results) { 
    if (err) throw err; 
    return new Promise(function(resolve, reject) { 
     var pic = results[0].pic; 
     var name = results[0].name; 
     var link = results[0].link ; 
     var winnerInfo = { 
      id: winner, 
      name: name, 
      total: total, 
      totalItems: totalitems, 
      pic: pic, 
      link: link, 
      percentage: playerPercentage 
     } 
      io.sockets.emit('animation', { 
      winnerData : winnerInfo 
     }); 
     resolve(winnerInfo); 
    }).then(function(winnerInfo){ 
     setTimeout(finishedGame(winner, winnerInfo), 20000); 
    }); 
    connection.end(); 
}); 
+0

Sie benötigen ein Versprechen für die Auszeit vom 'then' Rückruf zurückzukehren, andernfalls wird die Kette nicht warten. – Bergi

+0

'setTimeout' nimmt eine Rückruffunktion, keinen Anruf. – Bergi

+0

'if (err) throw err;' ist wahrscheinlich der häufigste falsche Code den ich hier sehe. Das wirft nur in einen asynchronen Handler, der nichts Nützliches tut und nichts, was Sie fangen können. Setzen Sie den Fehler in Ihr Versprechen und führen Sie eine Ablehnung durch, wenn ein Fehler auftritt. – jfriend00

Antwort

Verwandte Themen