2016-08-27 124 views
0

爲什麼不會usernametoid函數返回什麼?我知道它通過安慰它存在,但它不會存儲在otherplayerid變量?爲什麼?Node.js不會返回任何東西?

我的應用程序:(調用API後殺)

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:

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

我會怎麼做然後@ jfriend00? – maria

回答

1

你需要閱讀有關異步調用。這是數據庫請求。簡單修復是回調:

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

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

返回兩個值(錯誤,回調)是一種很好的做法。但你可以稍後閱讀。 也有承諾。你可以閱讀關於它們的回調函數,但是建議同時知道這兩個函數。

+1

我們通常應該儘量避免回答有幾百個相同基本問題重複的問題,因爲它只是污染了計算器搜索。這是其中的一種情況。 – jfriend00

+0

@ jfriend00瞭解先生。下次我會記住這一點。 – Mort

+0

我的問題@ jfriend00關於異步 – maria