Zrozumienie funkcji zwrotnych funkcji (err, data)

Więc jestem zdezorientowany, jak działa funkcja zwrotna funkcji (err, data), czy pierwszym argumentem jest zawsze obsługa błędów?

A co z pozostałymi argumentami, jeśli masz coś podobnego do funkcji (x, y, z, a, b, c)?

Jak dane z fs.readFile przechodzą z górnej linii kodu do dolnej linii kodu? Innymi słowy, w jaki sposób dane wyjściowe fs.readFile są umieszczane w argumencie danych?

fs.readFile(pathToFile, function (err, **data**) {
    bufferString = **data**.toString();

Mogłem zastąpić funkcję (err, data) funkcją (x, y) i funkcją (x, y, z, a, b, c)

Ale działa tylko drugi argument (dane i y), czy to tylko składnia wywołań zwrotnych javascript?

Na przykład jest to działający kod do asynchronicznego odczytu pliku i wydrukowania liczby wierszy nadanych plikowi:

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);

questionAnswers(4)

yourAnswerToTheQuestion