了解函数(错误、数据)回调

end*_*cat 5 javascript asynchronous callback node.js

所以我对 function(err, data) 回调的工作方式感到困惑,第一个参数总是错误处理程序吗?

如果你有函数 (x, y, z, a, b, c) 之类的东西,剩下的参数呢?

fs.readFile 中的数据如何从最上面一行代码传递到最下面一行代码?或者换句话说, fs.readFile 的输出如何放入 data 参数中?

fs.readFile(pathToFile, function (err, **data**) {
    bufferString = **data**.toString();
Run Code Online (Sandbox Code Playgroud)

我可以用函数 (x, y) 和函数 (x, y, z, a, b, c) 替换函数 (err, data)

但只有第二个参数有效(数据和 y),这只是 javascript 回调的语法吗?

例如,这是异步读取文件并打印给定文件的行数的工作代码:

var fs = require('fs');
var pathToFile = process.argv[2];
var bufferString, bufferStringSplit;

function counter(callback) {
  fs.readFile(pathToFile, function (err, data) {
    bufferString = data.toString();
    bufferStringSplit = bufferString.split('\n');
    callback();
  });
}

function logMyNumber() {
  console.log(bufferStringSplit.length-1);
}

counter(logMyNumber);
Run Code Online (Sandbox Code Playgroud)

jfr*_*d00 5

回调的调用者(readFile在本例中是方法)决定将哪些参数传递给回调。您需要声明您的回调以匹配readFile它将传递给回调的内容。您可以为参数命名任何您想要的名称(您使用的名称无关紧要),但它们将按照readFile决定的顺序获取值。

在这种情况下,fs.readFile()使用代码中的两个参数调用回调,如callback(err, data).

这是 node.js 文档中的一个示例:

fs.readFile('/etc/passwd', function (err, data) {
  if (err) throw err;
  console.log(data);
});
Run Code Online (Sandbox Code Playgroud)