0

期待される出力: "x is 2" 実際の出力: "x is undefined"

app.js

var x = db_Save(req.session.user);
console.log('x is ' + x);

dbFile.js

var db_Save= function (user) {

    // return 2; /* 'x is 2' would print;

    console.log('function returns "undefined" before following');
    userProfile.find({Email: profileInstance.Email}, function(err, doc){
        console.log('prints after "x is undefined"');
        return 2; // does not get returned  
    });
}
4

2 に答える 2

3

コールバック関数を使用します:

db_Save(req.session.user,function(x){
    console.log('x is ' + x);
});

var db_Save= function (user,callback) {
    userProfile.find({Email: profileInstance.Email}, function(err, doc){                                
        callback(2);
    });
};
于 2013-09-13T13:41:54.853 に答える
1

userProfile.find は非同期です。つまり、開始されますが、console.log が発生するまで 2 は返されません。あなたのコールバックはこの関数です:

 function(err, doc){                              
    console.log('prints after "x is undefined"');
    return 2; // does not get returned  
  }

これを への呼び出しの 2 番目の引数として指定しますuserProfile.find。検索が完了すると、関数が呼び出されて 2 が返されますが、この時点では既に手遅れであり、その時点では定義されていなかった x が console.logged になっています。

于 2013-09-13T13:43:12.140 に答える