2014-10-01 26 views
1

我是node.js的新手。我一直在看到代碼中只有一個回調方法被調用,但它從來沒有在文件的任何地方定義過。因此,如果沒有定義,那麼對回調方法的調用到底做了什麼?例如回調方法是否需要在node.js中定義?

CollectionDriver.prototype.findAll = function(collectionName, callback) { 
this.getCollection(collectionName, function(error, the_collection) { 
    if(error) callback(error); 
    else { 
    the_collection.find().toArray(function(error, results) { 
     if(error) callback(error); 
     else callback(null, results); 
    }); 
    } 
}); 

};

據我所知,基於this.getCollection(collectionName)方法的成功或失敗,回調方法「callback」被適當調用,但是沒有定義可用於回調方法。那麼這個通話如何有用?

回答

1

當調用findAll()callback參數被傳遞。調用者應該適當地定義它並傳遞參考。這是Javascript的一個特性,所以它不僅僅是node.js。

你應該看到像這樣的調用代碼:

var driver = new CollectionDriver(...); 
driver.findAll("foo", function(err, results) { 
    if (err) { 
     console.log(err); 
    } else { 
     // process results here 
    } 
}); 

這裏,回調調用者定義並傳遞給findAll()方法。


它也不一定是上面的內聯函數定義。呼叫者也可能是這樣的:

function findCallback(err, results) { 
    if (err) { 
     console.log(err); 
    } else { 
     // process results here 
    } 
} 

var driver = new CollectionDriver(...); 
driver.findAll("foo", findCallback); 

在這兩種情況下,你傳遞給函數的引用.findAll()它完成時調用。

+0

我明白,當函數完成時,它調用可以內聯或單獨定義的回調方法。您也提供了適當的定義。但是,如果您看看我的示例,那麼回調方法只是稱爲回調(錯誤)或回調(null,結果),並且沒有可用的定義。因此,我可以不定義回調函數,當我們知道一旦函數完成後它將被調用,那麼明確調用回調函數的用法是什麼。 – 2014-10-01 06:21:57

+0

@AbhishekChauhan - 我不明白你的評論在這裏。當執行'.findAll()'時,回調函數僅在runtme中被調用。在那個時候,它的價值來自傳遞給'.findAll()'的參數。該部分與使用參數'collectionName'的函數沒有區別。也許你不明白函數引用可以傳遞給一個函數,然後接收函數可以調用它。 – jfriend00 2014-10-01 06:33:40

+0

我明白我們可以調用傳遞給另一個方法的方法作爲參數。但我想在這裏指出的是,沒有定義回調方法 - 既不在調用findAll()的地方,也不在定義它的地方(這是代碼本身)。那麼,如果沒有提供定義,那麼對callback()的調用會做什麼? – 2014-10-01 07:04:29

1

callbackfindAllfunction(collectionName, callback)!)的參數。你會這樣使用它:

// assuming `driver` is an instantiated `CollectionDriver`: 
driver.findAll("collectionOfCows", function(error) { 
    console.log("findAll called us back with", error); 
}); 
相關問題