2016-06-23 6 views
0

Hallo dies für die erste Ausführung funktioniert, aber dann, wenn ich es erneut versuchen scheint, zu brechen nicht mit der Art und Weise etwas falsch scheinen die Versprechungen hier verwendet werdenMögliche Versprechen Ausgabe

socket.on('new user', function(data, callback) { 
    return getUsersFromDb() 
    .then(function() { 
     if (users.name.indexOf(data) > -1) { 
      callback(false); 
      reject(err); 
     } 
     else { 
      callback(true); 
      // socket.nickname = data; 
      // people[socket.nickname] = socket; 
      updateNicknames(); 
      var user = new User(); 
      user.name = data; 
      user.save(function(err, data) { 
       if (err) { 
        console.log(err)  
       } 
       else { 
        return getUsersFromDb() 
        .then(function() { 
         updateNicknames() 
        }) 
        .catch(function(e) { 
         console.log("Error", e) 
        }) 
       } 
      }); 
      socket.broadcast.emit('user join', {nick: socket.nickname}); 
     } 
    }) 
    .catch(function(e) { 
     console.log("Error", e) 
    }) 
}); 

Sublime scheint die dann zu färben und Fang innerhalb der zweiten sonst anders, als ob es falsch verwendet wurde

+0

Was ist die 'Socket'-Variable? Ist es eine socket.io-Verbindung? Oder eine einfache Steckdosenverbindung? Warum rufen Sie auch 'reject (err)' auf? Wo ist 'reject()' definiert? Und warum denkst du, dass das zweite Argument für den Callback "socket.on()" ein Callback selbst ist? Was macht 'updateNicknames()'? Welches Debugging hast du gemacht, wenn es nicht funktioniert? Weißt du, welchen Code-Pfad es braucht? Welche Fehler haben Sie? Das hört sich so an, als müssten Sie zuerst das Debuggen von Elementen durchführen, damit Sie uns genau sagen können, wo der Code falsch läuft. – jfriend00

+0

Ihr Code muss wirklich restrukturieren, wofür kommen Sie zurück? Sie sollten dann eine Zusage machen, wenn Sie mehrere asynchrone Anrufe haben, und diese zusammenketten –

Antwort

-1

Ich nehme an, die folgende Funktion gibt ein Versprechen !?

getUsersFromDb() 

Haben Sie jQuery Versprechen versucht, $ .when (functionWhichReturnsAPromise()) verwendet wird. Dann ("der Rest des Codes")?

+0

Zunächst ist dies serverseitiger Code (daher ist jQuery nicht wirklich geeignet). Zweitens gibt es keinen Grund, '$ .when()' mit einem einzigen Versprechen zu verwenden. Sie können '.then()' direkt auf das Versprechen setzen, das Sie bereits haben. Dies scheint auf die Frage des OP keine wirkliche Antwort zu geben. – jfriend00