Как работают такие функции, как аргументы обратного вызова fs.WriteFile()?

#javascript #node.js

#javascript #node.js

Вопрос:

В данный момент я изучаю JavaScript, в частности Node JS. И во время базового урока я заметил, что некоторые функции имеют обратные вызовы с предопределенными аргументами. Например

 fs.writeFile(
path.join(__dirname, 'test', 'hello.txt'), 
"Hello World", 
err => {
if (err) throw err;
console.log('File Created...')})
  

Я хочу знать, где «ошибка» была определена как ErrNoException тип.

Спасибо!

Комментарии:

1. Обратный вызов — это функция, которую вы предоставляете в качестве аргумента для appendFile . Функция обратного вызова принимает один аргумент, который вы определяете. в случае ошибки модуль fs вызовет предоставленную функцию обратного вызова с объектом err

Ответ №1:

Вы можете написать подобные функции самостоятельно. Обратный вызов — это просто функция (F), которая передается другой функции (A) в качестве параметра. Функция (A) выполняет некоторые задачи, а затем выполняет функцию F из параметров. Например:

 function getData(url, callback) {
    fetch(url)
        .then(res => callback(null, res))
        .catch(err => callback(err, null))
}
  

В примере функции происходит следующее: после выполнения запроса на выборку мы ждем, пока не будет сгенерирован ответ или ошибка. Если ответ есть, мы просто передаем его в параметр обратного вызова 2 и вызываем первый параметр null и наоборот.
Теперь, при вызове функции,

 getData('http://stackoverflow.com', (err, res) => {
     if(err)
         return console.log(err)
     console.log(res)
})
  

Ответ №2:

Я хочу знать, где «ошибка» была определена как тип ErrNoException .

В этом типе интерфейса вы передаете функцию обратного вызова и fs.writeFile() определяете, какие аргументы она будет передавать при обратном вызове. Вы должны объявить в своей функции обратного вызова аргументы с соответствующими именами, которые соответствуют тому, что будет передавать вызывающий. Итак, ВЫ должны объявить обратный вызов с соответствующим именем аргумента. Поскольку Javascript не является типизированным языком, вы не указываете, какой тип этого аргумента. Тип аргумента определяется кодом, который вызывает обратный вызов. В данном случае это fs.writeFile() реализация. Чтобы правильно использовать обратный вызов, вы должны прочитать документацию fs.writeFile() , чтобы знать, как использовать аргумент для обратного вызова.

Итак, в данном конкретном случае fs.writeFile() требуется функция обратного вызова, и этой функции обратного вызова будет передан один аргумент, и этот аргумент будет либо by null (если ошибки не было), либо будет объектом Error, который объясняет, в чем заключалась ошибка). Вы должны изучить это, либо прочитав код fs.writeFile() , либо прочитав некоторую документацию для него.

Важно понимать, что когда вы определяете свою функцию обратного вызова, все, что вы делаете, это указываете имя аргументов, с которыми, как вы ожидаете, будет вызван обратный вызов. Затем вы можете использовать это имя в своем коде для ссылки на эти аргументы. Фактические данные, которые передаются этому обратному вызову при его вызове, будут предоставлены fs.writeFile() функцией при вызове обратного вызова.

Неясно, что именно вы подразумеваете под «определенным как тип ErrNoException». В Nodejs вызывается внутренняя функция (недоступная для внешнего использования) errNoException() , и вы можете увидеть источник здесь . Он использует эту функцию внутри для создания объекта ошибки с некоторыми общими свойствами, такими как код ошибки и трассировка стека.