回调方法没有必要在node.js中有定义吗?

时间:2014-10-01 05:25:42

标签: javascript node.js callback

我是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)方法的成功或失败,回调方法"回调"被适当调用,但是没有可用于回调方法的定义。那么这个电话怎么有用呢?

2 个答案:

答案 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)

callbackfindAllfunction(collectionName, callback)!)的参数。你可以像这样使用它:

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