2012-04-17 102 views
2

我有很多麻煩得到couchdb的響應處理程序做任何有用的node.js和now.js。我的目標是回電給客戶或小組,並提供某些信息,這些信息已經找到,並且也從客戶端發送。在couchdb函數外調用變量?

everyone.now.login = function(){ 
var username = this.now.lusername; 
var password = this.now.lpassword; 
var test; 
db.get(this.now.lusername, function (err, doc, test, username) { 
    if (err) { 
     console.log(+ username + " doesn't exist!"); 

    } else { 
     console.log('Found user!'); 
     console.log(doc); 
     test = 1; 
    } 
    }); 
    console.log(test); 
} 

我在這裏使用測試作爲示例。我在db.get之外聲明它,在內部分配一個值以反饋,但是當console.log在外部運行時,它沒有值。

我只是沒有得到它或者是錯的?

(我不釋放我可以使用文檔。(任何值),但我想回傳給客戶端這一呼籲之外的特定變量)

回答

2

test變量將不會有一個值console.log,因爲CouchDB響應尚未到達。您的登錄功能執行以下步驟。

  1. 設置一些變量(usernamepasswordtest是不確定的)
  2. 開始一個CouchDB的擷取(適用於this.now.lusername)與分配給運行一個函數當它完成
  3. 運行console.log(test)這仍然是不確定的
  4. CouchDB的響應完成,並從步驟你的函數2運行

我喜歡的事情做這是使用函數調用。

everyone.now.login = function(){ 
    var username = this.now.lusername; 
    var password = this.now.lpassword; 

    db.get(this.now.lusername, function (err, doc, test, username) { 
    if (err) { 
     console.log(+ username + " doesn't exist!"); 

    } else { 
     console.log('Found user!'); 
     console.log(doc); 
     login_complete(doc); 
    } 
    }); 

    function login_complete(doc) { 
    console.log('The login finished! Doc is ' + doc) 
    } 
} 

這樣的代碼仍然看起來正確(以下簡稱「故事」的代碼大多是從上往下流),但它也正確執行(該login_complete()函數運行後才能登錄實際上是完成)。

+0

太好了,謝謝解釋! – Verbium 2012-04-18 09:37:21