Функция обратного вызова внутри readFile () - PullRequest
0 голосов
/ 04 июня 2018

Мои вопросы здесь о том, как работает функция обратного вызова.

const fs = require('fs');

let fileContents = 'initial value';
fs.readFile('file.txt', 'utf-8',function(error,res){
    fileContents = res;
    console.log(fileContents);
})

Итак, когда запускается fs.readFile, вызывается function(error,res).Но почему fileContents получает текст внутри txt-файла, если мой параметр пуст?Я предполагаю, что readFile добавляет значение, считанное к параметру res.Это всегда так?

Еще один вопрос: почему я получаю null, когда стираю error?

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Возможно, потребуется немного времени, чтобы поэкспериментировать с функциями обратного вызова.

Функция обратного вызова - это просто функция, которую вы передаете в качестве параметра другой функции.В приведенном ниже коде я объявил свою функцию.myFunc использует другую функцию в качестве параметра для функции обратного вызова.Внутри моей функции я вызываю функцию и передаю myName в качестве параметра для обратного вызова.Это позволяет мне объявлять другие анонимные функции в качестве параметров, которые я включил в качестве примеров.Когда myFunc вызывается, он вызывает обратный вызов в своей локальной среде.

Затем я могу манипулировать данными, которые передаются в обратный вызов, и писать свой собственный код внутри анонимной функции, используя переменную, которая передается в обратный вызов myFuncs.

В вашем примере вы используете readFileкоторый извлекает данные из файла и передает их в функцию обратного вызова и / или передает ошибку, предполагая, что что-то пошло не так.

function myFunc( callback){
    let myName = "Joe Smo";
    callback(myName);
}
/*
Now I can use my function and add another anonymous function to do whatever I want
provided I use the same parameters that are inside my function. 
*/
myFunc(function(name){
    console.log("What's up!"+name);
});

myFunc(function(strangeName){
    console.log(strangeName+" is a strange name.");

});
0 голосов
/ 04 июня 2018

Readfile выглядит примерно так:

 function readFile(path, cb) {
   try {
   // Some very complicated stuff
   // All fine, call callback:
   path(/*error:*/ null, /*res: */ "somedata");
  } catch(error) {
   path(error, /*res: */ undefined);
 }
}

То, что вы получаете внутри параметра callbacks, зависит не от его имени, а от его позиции, поэтому, когда вы делаете:

readFile("/..", function(res) { /*...*/ });

res будет ошибкой readFile, и если это null, это хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...