callback方法在node.js中是否有必要定义?

我是node.js的新手 我已经看到代码,只是调用callback方法,但它永远不会在文件中的任何地方定义。 因此,没有定义什么是调用callback方法到底做了什么? 例如

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方法“callback”被适当调用,但没有定义可用的callback方法。 那么这个通话如何有用呢?

callback findAll()时传递callback参数。 由呼叫者来适当地定义它并传递一个参考。 这是Javascript的一个特性,所以不仅仅是node.js。

您应该在调用代码中看到类似这样的内容:

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

在这里,callback由调用者定义并传递给findAll()方法。


它也不一定是上面的内联函数定义。 来电者也可以是这样的:

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

在任何一种情况下,都会.findAll()函数的引用传递给它在完成时调用的.findAll()

callback function(collectionName, callback)findAllfunction(collectionName, callback) !)的参数。 你会像这样使用它:

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