2016-08-27 8 views
0

なぜusernametoid関数は何も返しませんか?私はそれをconsolingによって存在することを知っているが、それはotherplayerid変数に格納されません?どうして?Node.jsは何も返さないでしょうか?

私のアプリ:

var userFunc = require('../factory/user_factory.js'); 

    app.post('/api/kill', function (req, res) { 

     var username = "signature";//req.query.username; 

     var otherplayerid = userFunc.usernametoid(username); 
if (!(otherplayerid)) { 
       console.log("other player is acually " + otherplayerid); 
       result.push("denne brukeren finnes ikke! " + otherplayerid); 

      } else { 

} 
}); 

と私のuser_factory(ポストAPIキルを呼び出す):

var articles = require('../controllers/articles.server.controller'), 
    path = require('path'), 
    mongoose = require('mongoose'), 
    Article = mongoose.model('Article'), 
    Users = mongoose.model('User'), 
    errorHandler = require(path.resolve('./modules/core/server/controllers/errors.server.controller')); 



exports.usernametoid = usernametoid; 





    function usernametoid(id) { 

     var query = Users.findOne({ username : id }); 
     query.exec(function(err, datas) { 
console.log(datas._id); 
      return datas._id; 
     }); 
    } 

コンソール:

other player is acually undefined 
    57c1c0f3b6b20c011242bf22 
+0

コンソール出力はどのようなものですか? – Zeokav

+1

非同期操作から情報を返そうとしています。あなたはそれをすることはできません。 – jfriend00

+0

どうすればいいですか? – maria

答えて

1

をあなたは非同期呼び出しについて読む必要があります。 db要求です。単純な修正はコールバックです。

function something(data, callback) { 
    return callback('some data from db') 
} 

something('x', function(cb) { 
    console.log(cb) 
} 

2つの値(エラー、コールバック)を返すことをお勧めします。しかし、後で読むことができます。 約束もあります。あなたはそれらについてコールバックを読むことができますが、両方を知っておくことをお勧めします。

+1

一般的には、stackoverflow検索を汚染するだけの同じ基本的な問題の何百もの重複がある質問に答えるのを避けてください。これらのケースの1つです。 – jfriend00

+0

@ jfriend00 understand Sir。次回はそのことを覚えておきます。 – Mort

+0

asyncに関して@jfriend00に関する質問があります – maria

関連する問題