2017-01-06 5 views
0

私はノードに慣れていません。私はmongoose経由でmongoに何かを保存しようとしています。 saveにエラーがある場合(たとえば、現在の名前のユーザーがいる場合)はfalseを返したいと思います。 問題は、console.logs 1:2:6:7:3:4:5の順番です。 私はadduserを同期して呼び出せる方法はありますか?model.save()に戻り値を持たせることはできますか?

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

答えて

1

あなたはそれらが同期、またはあなたがあなたの全ノードのスレッドをブロックしますを行うべきではありません。

代わりに、約束を返すか、コールバック付きの単純な関数を返す必要があります。あなたはreturn newUser.save()

を行うことができますそして、あなたはaddUser.then()のようにそれを実行したい

mongoose saving oneのような、そのマングースの両方をサポートしています注意してください)。また、module.exports = function()を落としてまたはpromiseを使用してmodule.exportsの機能を実行することもできます。

0

NodeJsはシングルスレッドプロセスであり、同期呼び出しでブロックしないでください。

mongodbから応答を受け取ったときにアクションを実行するには、コールバック関数を渡す必要があります。

これは、NodeJsに入ったときにコールからブロック、コールバックまでの重要な切り替えです。

関連する問題