我是node.js和异步JS的新手,我不确定我是否正确解释它。我试图理解这段代码:
HttpsURLConnection.setDefaultHostnameVerifier((a, b) -> true);
是异步的? 是因为我可以多次调用 countLines 函数,每次使用不同的 filedir 参数,所以它打印出文件的长度?我的意思是......那是异步的?这不仅仅是功能如何运作?
答案 0 :(得分:3)
它是异步的。
它只是使用命名函数而不是匿名函数。
基于此,代码可以像这样重写:
var fs = require('fs')
var filedir = process.argv[2]
function countLines(filedir) {
fs.readFile(filedir, "utf8", function(err, fileContents) {
var lines = fileContents.split("\n")
console.log(lines.length-1)
});
}
countLines(filedir)
编辑:
要扩展@ squint的注释,在nodejs应用程序的 speed 不重要的情况下,使用readFile方法的同步变体是合理的,由于同步读取命令会导致整个程序在继续之前等待读取操作完成。
答案 1 :(得分:2)
它是异步的。但它并非异步,因为您多次调用<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
。它是异步的,因为您在以下位置执行异步函数调用:
countLines()
此功能不会阻止您的过程。它被异步调用。调用该函数后,控件不会等待函数同步完成,而是继续执行其余代码。加载文件后,将调用回调函数。在fs.readFile(filedir, "utf8", doneReading);
函数调用后放置console.log("I run first")
,并将非常大的文件提供给脚本。您可以看到控制台在加载文件内容之前记录我先运行。但是如果您使用countlines()
同步备选,并在函数调用后放置fs.readFileSync()
并记录某些内容,您将看到脚本等待直到读取整个文件,然后才记录您的日志。
异步函数通常具有以下模式:
console.log()
您可以将yourAsyncCall(arg1,arg2,...,callbackFunction);
隐式定义为匿名函数,就像在Oliver的答案中一样,或者在其他地方定义,例如您的示例。它具有callbackFunction()
作为第一个参数的约定,并且来自回调的结果(如果没有错误发生)作为第二个参数。正如您在
error