2015-04-17 175 views
0

我想創建一個存儲庫類/函數庫模式在JavaScript,但因爲回調的我無法從函數返回一個值:貓鼬和的NodeJS有沒有回調

this.getAll = function(collection) 
{ 
    var result; 

collection.find(function (err, objects) { 
       if (err) return console.error(err); 
       console.log(objects); 
       var result = objects; 
     }); 

    return result; 
} 

var result = repo.getAll(Kitten); 
console.log(result); 

但這裏的結果先被調用並且稍後調用回調。做我想做的事情是一個好主意嗎?或者,我應該只是將回調函數傳入存儲庫中?

回答

2

我使用回調。它認爲它是NodeJS功能。你也可以用promise來代替回調。

您可以爲存儲庫中創建類似的方法爲:

function getAll(collection, cb){ 
    collection.find(function (err, objects) { 
     cb(err, objects); 
    }); 
} 

getAll(Kitten, function(err, objects){ 
    console.log(objects); 
}); 
0

你應該學習如何使用回調。如果您不喜歡它創建的語法,則可以使用promise。 JavaScript和NodeJS中的回調是最基本的。但爲了避免聖誕樹效應,請將代碼重構爲函數和方法。我也建議你看看異步模塊,特別是async.series和async.parallel。

您可以看看the following blog,其中突出顯示了有關nodejs的一些有效點。