2017-01-06 3 views
0

Ich bin neu in Node und ich versuche etwas über Mungo zu Mongo zu speichern. Ich möchte false zurückgeben, wenn speichern einen Fehler hat (zB gibt es einen Benutzer mit dem aktuellen Namen). Das Problem ist die Reihenfolge der console.logs 1: 2: 6: 7: 3: 4: 5 gibt es eine Möglichkeit, ich adduser synchron aufrufen kann?Kann ich model.save() bekommen, um einen Rückgabewert zu haben?

module.exports.addUser = function(username,password){ 
console.log(1); 
var newUser = User({ 
    username:username, 
    password:password 
}); 
console.log(2); 
newUser.save(function(err,prod,numeffect){ 
    if (err){ 

     console.log(err); 
    } 
    if (numeffect === 1){ 
     console.log(3); 
     console.log("num effect = "+numeffect); 

    } 
    console.log(4); 
    console.log(prod); 

}).then(function(doc){console.log(5)}); 
console.log(6); 
} 

mongoose.addUser(req.body.username,req.body.password); 
    console.log(7); 

Antwort

1

sollten Sie nicht sie synchron, oder du wirst deinen ganzen Knoten Thread blockieren.

Stattdessen sollten Sie ein Versprechen oder eine einfache Funktion mit Rückruf zurückgeben. (Wie mongoose saving one, feststellen, dass Mungo beide unterstützt)

Sie tun können return newUser.save()

Dann würden Sie es wie addUser.then() laufen. Sie können auch Ihre module.exports = function() und module.exports Ihre Funktion mit callback oder promise fallen lassen.

0

NodeJs ist single-threaded Prozess, und Sie sollten es nicht mit synchronen Aufrufen blockieren.

Sie sollten eine Callback-Funktion übergeben, um Aktionen auszuführen, wenn Sie eine Antwort von mongodb erhalten.

Das ist ein wesentlicher Wechsel von Call und Block zu Callback, wenn Sie in NodeJs kommen.

Verwandte Themen