如何阅读javascript框架文档?
来自.NET世界的我有一份非常耗时的javascript框架文档。我将以“Node.js MongoDB驱动程序API”为例。有一个如何阅读javascript框架文档?,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,来自.NET世界的我有一份非常耗时的javascript框架文档。我将以“Node.js MongoDB驱动程序API”为例。有一个Collection对象,它具有count()方法。以下是它的链接: 从这里我看到,count()采用三个参数: count(query, options, callback) 起初,我认为我需要提供这三种方法才能使用这种方法。但是,在该方法的示例代码中,我看到它有时只使用一个参数,有时只使用一个参数: // Perform a total count comma
Collection
对象,它具有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();
});
在第一种情况下,它仅使用回调
参数调用count(),而在第二种情况下,它提供选项
和回调
。没有使用原始方法说明中所述的所有三个参数的示例
我的问题是一个人怎么知道这些事情?我的意思是,如果本文档中没有示例,我怎么知道这是可能的?另外,如果没有像这样的例子,我如何确定该方法还有其他一些可能的用法
我知道只提供一些参数就调用javascript函数是完全合法的,函数应该能够根据实现来处理它。但作为API的消费者,我不想研究函数实现来找出我可以传递什么样的参数组合。我觉得这个文档还不完整(我以这个mongodb驱动程序为例,但我在其他js框架文档中遇到了类似的问题)
我在阅读javascript文档时是否应该有某种推理,在试图理解不同框架的API时如何思考,如何知道什么是可能的,什么是不可能的等等?在JavaScript中,特别是Node.JS world中,异步函数有一个常见的模式,即它们的最后一个参数应该是回调函数
count(query, options, callback)
调用异步函数时,必须预见调用的结果将出现在回调中,否则如何获得异步函数调用的结果?所以
根据上面的语句,您至少应该为count方法和在JavaScript中调用的其他异步函数提供一个回调函数
当您看到MongoDB的方法时,另一件可以帮助您的事情是,如果您要使用数据库处理某些数据,您通常需要至少提供一个查询对象和一个回调函数,但如果您需要查询的其他信息,您将提供,选项对象
我知道文档中没有很好地解释查询和选项参数是否为optionals,但如果您看到的源代码以及我在代码上添加的注释,您可以理解:
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方法中提供的示例中,您正在向count方法传递查询和回调和not选项和回调:
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世界中的这种常见回调模式。我想这只是假设您熟悉JavaScript。如果函数中未输入参数,则函数中未定义该参数。如果参数多于定义的参数,则忽略这些参数。除非它们可以通过arguments变量访问。如果它没有指定它的所有参数,那就是缺少文档,但我发现它们总是这样。例如,您给出的计数示例清楚地列出了它的参数。它遵循一种常见的设计模式,数据/选项/回调。e、 g coll.count({b:1},{limit:true,skip:false,hint:'derp'},函数(err,count){});