2012-01-22 120 views
0

我經常遇到在設計方面的問題,如果涉及到這一點:避免局部變量

var pages, 
    book 
; 

Book.findOne({ title: "First Book" }, function(err, doc) { 
    pages = doc.pages; 

    console.log(pages); 
}); 

res.json(pages, 200); 

pages是不確定的,但我把它設置爲doc.pages。如果我將res.json(pages, 200)轉換爲findOne的回調,則此腳本完美工作。

我跟着一個錯誤的模式/代碼設計,當涉及到JavaScript或有一個解決方案,以保持res.json()走出回調,除了使全球pages

回答

6

問題是,你正在通過Book.findOne找到匹配項時執行回調。之後,您將調用res.json,並將其作爲參數傳遞給pages。重要的是要明白,此時回調不會被執行。你能夠在回調函數中移動響應嗎?

Book.findOne({title: 'First Book'}, function (err, doc) { 
    res.json(doc.pages, 200) 
}) 
+0

是的,那很好。 我已經認爲這是在Javascript中通過回調工作的更常見的用法,因爲代碼是異步執行的,而不是嚴格地從一行執行到另一行。 –

+1

@ daemonfire300代碼不是異步執行的。回調被異步調用。 – fent