我可能在思考,但我无法消化Nodejs文档。我是javascript的新手,来自Java背景。
我的问题不是关于任何特定的nodejs功能只是整体理解。下面我举一个我想要了解的例子......
使用像Java这样的静态类型语言时,很清楚方法调用需要什么类型。一个简单的例子,如果我想对int的数组进行排序,我可以查看Arrays.sort并看到它需要一个int [](对于其他类型也是如此)。我也可以看到它返回void。
public static void sort(int[] a)
然而,javascript是一种动态语言,因此api调用没有类型。以crypto module
为例crypto.pbkdf2(password, salt, iterations, keylen, callback)
Asynchronous PBKDF2 applies pseudorandom function HMAC-SHA1 to derive a
key of given length from the given password, salt and iterations.
The callback gets two arguments (err, derivedKey).
因此,如果没有出去寻找示例代码,或者查看nodejs源代码,我如何知道函数的参数类型?我意识到可以通过查看名称来推导类型(即回调是一种函数类型),但还有其他方法吗?
例如,文档说回调有两个参数err和derivedKey。 derivedKey的类型是什么,类型或错误是什么?我错过了有关文档的内容吗?你怎么知道你是否传递了正确的类型?
注意:我已经知道derivedKey和err的类型是什么,所以我不需要像“derivedKey是......”这样的答案。我的问题是关于来自静态类型的人对Nodejs文档的整体理解语言并不是特定于crypto.pdkdf2。
答案 0 :(得分:3)
嗯,你几乎在思考。如果没有明确解释,你必须猜测大部分。就像你可以猜测迭代和keylen是数字而不是字符串。 NodeJS docs在他们认为你无法猜测时明确地解释参数,或者你必须知道关于它的其他信息。就像在crypto.createCredentials(details)
中一样,他们解释说细节是一本字典,你需要使用哪些键。
F.i.在err和derivedKey的情况下,由于没有明确的信息,我会假设两者都是字符串。如果事实证明它们不是,我会在回调函数中调试它们以查看它们是什么。
如果文档记下所有参数的类型但不知道是否值得付出努力,那么文档可以更加清晰。
答案 1 :(得分:1)
我有一些C#和Java的经验,并且已经编程了大约一年的JavaScript,所以我可能能够构建它。
JavaScript的一个方面是你可以在现场制作这样的对象:
var options = {
name: "something",
age: 9,
what: function() {
return 8;
}
};
每个人都利用这一点,因此它是理解JavaScript库的关键。
您也可以使用上面的options
对象,然后按照以下步骤操作:
options.mood = "ok";
换句话说,对象只是属性的束,并且没有设置结构。您可以使用for ... in
循环之类的语言结构来迭代它们。也就是说,err
之类的“类型”基本上是一个关联数组。
回调基本上无处不在,所以问题就变成了如何处理它们。常见的模式是function (err, maybeSomething)
。大多数时候,你只关心err
是“某事”。也就是说,你会经历这样的事情:
if (err) {
...
}
坦率地说,我做了很多console.log(err)
,看看我在开发过程中遇到了什么。
之后,这完全取决于文档。有些比其他更好。你真的没有遗漏任何东西。关于唯一的“技巧”是,有时一个文档将解释顶部的一切。
你会发现自己有时会找到一个库正在做什么,但97%的时间会有一些快速的猜测和检查会让你感动。