2015-07-13 4 views
1

У меня есть базовое понимание javascript и изучалось, как асинхронные функции работают в node.js. Я был очень смущен функциями обратного вызова с ошибкой параметра. Например, вот некоторый код:Node.js Функция обратного вызова Ошибка Параметр Объяснение?

contact.saveContacts = function(contactArray, done) { 
     var jsonfile = require('jsonfile') 
     jsonfile.writeFile('data.json', contactArray, done) 
} 

Contact.saveContacts(contacts, function(err) { 
     console.log('success') 
} 

Мой вопрос, почему функция обратного вызова содержит ошибку параметра? Я в замешательстве, почему он там, потому что кажется, что он не имеет никакой цели в функции, которую он вызывает.

ответ

0

в случае возникновения проблемы с операцией записи, такой как объект ошибки разрешений, и причина в этом для предотвращения непредвиденных ошибок. Представьте, что мы даем заказ, чтобы компьютер начинал делать это, но по пути theres блок о разрешениях, которые компьютер не может записать в этот каталог, в этом случае компьютер не знает, что делать, и наша программа вылетает, чтобы предотвратить этот внутренний обратный вызов, мы указываем, что делать это в таких случаях, например, если разрешение отклонено, и причина заключается в том, что пользователь запрашивает пароль для ввода пароля или принудительно записывает или открывает пользователю, что пользователь должен запускать его как пользователя.

0

Параметр ошибки не используется, если все идет хорошо. Но, это слишком полезно, когда приходит ошибка. Любой тип ошибки, например. ошибка выполнения, файл был удален или что-то еще, если это произойдет, детали ошибки будут присутствовать в параметре ошибки обратного вызова. Таким образом, его лучше использовать этот параметр следующим образом:

Contact.saveContacts(contacts, function(err) { 
    if(err){ 
     console.log(err); 
    } 
    else{ 
     console.log('success'); 
    } 

} 

Таким образом, вы получите, чтобы узнать какую-либо ошибку, если это произойдет с функцией.

+0

или просто 'console.log (err || 'success');', поскольку 'err' будет использоваться не фальсифицированным при использовании. – dandavis

+0

@ dandavis: да. это хорошо работает ... – amulya349

2

Это шаблон, называемый Ошибка первого обратного вызова и используется много в javascript.

См. this article для справки.

1

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

Асинхронные функции обратного вызова вызываются после того, как код вызова уже выполнен. Это означает, что нет возможности поймать заброшенные исключения. Поэтому вместо того, чтобы бросать, ошибки передаются функции обратного вызова, поэтому вызывающий код может обрабатывать как успешные, так и ошибочные состояния.

Смежные вопросы