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)
是findAll
( function(collectionName, callback)
!)的参数。 你会像这样使用它:
// assuming `driver` is an instantiated `CollectionDriver`: driver.findAll("collectionOfCows", function(error) { console.log("findAll called us back with", error); });