2014-03-30 17 views
0

我發現了一些針對nodejs的mongodb插件,但它似乎總是使用回調函數來返回搜索結果,我只是想直接得到結果作爲回報我怎樣才能使用任何mongodb插件得到的回報不在回調函數中的結果?

我無法通過使用此代碼獲取正確的返回值:

index.prototype.a = function(){ 
    var vars = {}; 
    vars.something1 = {}; 
    vars.something2 = 123; 
    mongous("db.test").find({name:'shura'},function(r){ 
     if(r){ 
      vars.something3= true; 
     }else{ 
      vars.something3= false; 
     } 
    }); 
    return vars; 
} 

這段代碼是什麼我想:

index.prototype.a = function(){ 
    var vars = {}; 
    vars.something1 = {}; 
    vars.something2 = 123; 
    var result = mongo_plugin("db.test").search({name:'shura'}); 
    vars.something3 = result?true:false; 
    return vars; 
} 

我怎樣才能讓vars.something3回報存在嗎?

+0

可能你想這樣做的同步方式! –

+0

[在Node.js中創建同步MongoDB查詢的正確方法是什麼?](http://stackoverflow.com/questions/12030248/what-is-the-right-way-to-make-a -synchronous-mongodb-query-in-node-js) –

+0

我會認真地敦促你做一個回調。任何能夠同步執行的事情都會在node.js中被黑客攻擊,並且讓事情變得更加可怕(並且破壞node.js最強大的賣點之一)。如果你只是不喜歡回調代碼的聖誕樹外觀,請考慮[異步庫](https://github.com/caolan/async) –

回答

0

node.js的賣點是它的異步特性。您應該使用真棒或使用像Ruby或Python這樣的腳本語言。這裏是節點的方式做你想做的事情(或我學會如何停止擔憂和喜歡回調):

index.prototype.a = function(cb){ 
    var vars = {}; 
    vars.something1 = {}; 
    vars.something2 = 123; 
    mongous("db.test").find({name:'shura'}, function(err, r){ 
     if(err) { return cb(err) }; 
     vars.something3 = r ? true : false; 
     cb(null, vars); 
    }); 
} 
+0

首先要感謝你的幫助。也許你的方法是對的,但結果並不是我想要的 – Shura

+0

是的,節點的異步特性起初有點怪異,但一旦你進入它就有意義。有一些圖書館可以幫助管理異步流程,因此看起來不那麼愚蠢。 [異步](https://github.com/caolan/async) - 我喜歡這個人,因爲它很小,使聖誕樹減少。 [ice coffeescript](http://maxtaco.github.io/coffee-script/) - 這個有更多的魔力,但是讓代碼LOOK正確同步,但是它與正常的js代碼有不同的語法。 –

相關問題