如何阅读JavaScript框架文档?

来自.NET的世界,我有一个很难的JavaScript框架的文档。 我将以“Node.js MongoDB驱动程序API”为例。 有一个Collection对象,它有count()方法。 这里是它的链接: http : //mongodb.github.io/node-mongodb-native/2.0/api/Collection.html#count

从那里我看到count()需要三个参数:

 count(query, options, callback) 

起初我以为我需要提供他们所有三个为了使用这种方法。 但是,在这个方法的示例代码中,我发现它有时只使用一个,有时只使用一个参数:

 // Perform a total count command collection.count(function(err, count) { test.equal(null, err); test.equal(4, count); // Peform a partial account where b=1 collection.count({b:1}, function(err, count) { test.equal(null, err); test.equal(1, count); db.close(); }); 

在第一种情况下,它只用callback参数调用count(),而在第二种情况下它提供了optionscallback 。 没有使用原始方法描述中所述的全部三个参数的示例。

我的问题是怎么能知道这样的事情? 我的意思是,如果在这个文件中没有例子,我怎么知道这是可能的? 另外我怎样才能确定,如果没有这样的例子覆盖的方法有其他一些可能的用法?

我知道,只提供一些参数来调用javascript函数是完全合法的,函数应该能够根据实现来处理它。 但作为API的消费者,我不想查看函数实现来确定我可以传递什么样的参数组合。 我觉得这个文档是不完整的(我拿这个mongodb驱动程序作为例子,但我碰到类似的问题与其他js框架文档)。

在阅读javascript文档时,是否应该有一些理由,试图理解不同框架的API,如何知道什么是可能的,什么是不是等…?

在JavaScript和特殊的Node.JS世界中,asynchronous函数有一个通用模式,它们的最后一个参数应该是一个callback函数。

 count(query, options, callback) 

当你调用一个asynchronous函数时,你必须预见到调用的结果将进入callback,否则如何获得asynchronous函数调用的结果? 所以基于上面的语句,你至less应该为你在JavaScript中调用的count方法和其他asynchronous函数提供一个callback函数。

当你看到MongoDB的方法时,另一个可以帮助你的事情是,如果你要用数据库处理一些数据是很常见的,你至less需要提供一个查询对象和一个callback函数,但是如果你需要额外的信息您将提供的查询, 选项对象

我知道,文档不好解释查询和选项参数是可选的,但如果你看到count方法的源代码,并阅读我的意见,你可以了解代码添加:

 Collection.prototype.count = function(query, options, callback) { // args represents the three parameters var args = Array.prototype.slice.call(arguments, 0); // extract your last argument and assumes that it is the callback function callback = args.pop(); // extract the first argument that is query query = args.length ? args.shift() || {} : {}; // extract the second argument but this time shift already extracted query // so the first parameter this time will be options. options = args.length ? args.shift() || {} : {}; ... } 

如果您将以下值传递给调用,您将看到该顺序如何用count方法来获取参数:

 count({}, {}, function callback() {}); // count(query, options, callback) count({}, function callback() {}); // count(query, callback) count(function callback() {}); // count(callback) 

事实上,在你的例子中,你提供了嵌套调用count方法,你传递一个查询和callback,不是选项和callback计数方法:

 collection.count(function(err, count) { test.equal(null, err); test.equal(4, count); // You are passing the values in this order (query, callback) // {b: 1} === query collection.count({b:1}, function(err, count) { test.equal(null, err); test.equal(1, count); db.close(); }); 

我希望这个解释和代码可以帮助你理解JavaScript世界的这种常见的callback模式。