我是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)方法的成功或失败,回调方法"回调"被适当调用,但是没有可用于回调方法的定义。那么这个电话怎么有用呢?
答案 0 :(得分:1)
调用callback
时传递findAll()
参数。由调用者适当地定义它并传递对它的引用。这是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()
。
答案 1 :(得分:1)
callback
是findAll
(function(collectionName, callback)
!)的参数。你可以像这样使用它:
// assuming `driver` is an instantiated `CollectionDriver`:
driver.findAll("collectionOfCows", function(error) {
console.log("findAll called us back with", error);
});