Может кто-нибудь объяснить, как обратные вызовы вызываются в Node.js, пожалуйста? - PullRequest
0 голосов
/ 05 апреля 2019

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

var removeById = function(personId, done) {
  Person.findByIdAndRemove(personId, function(err, data) {
    if(err) {
      done(err); 
    }
    done(null, data);
 });
};

Построчное объяснение.

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

Person.findByIdAndRemove - это что-то вроде:

Person.findByIdAndRemove = function(personId, callback) {
  // The code is executed 
  // call function on error | success
  callback(err, data);
};

Обратный вызов, который вы хотите выполнить, должен выглядеть примерно так:

const done = function(err, data) {
  if(err) {
   console.log(err); 
  }
  console.log(data);
}

Ваш код:

var removeById = function(personId, done) {
  Person.findByIdAndRemove(personId, function(err, data) {
    if(err) {
      done(err); 
    }
    done(null, data);
 });
};

Использование:

removeById(3, done);
0 голосов
/ 05 апреля 2019

Строка 1 (предположим)

var removeById = function(personId, done) {

done - это формальный идентификатор для callback, который вы передадите позже при вызове removeById function

Строка 2

Person.findByIdAndRemove(personId, function(err, data) {

findByIdAndRemove ожидает, что 2-й параметр будет функцией с двумя параметрами: первый err, это будет содержать ошибку, а второй data, это будет содержать данные / результат

Строка 4

done(err)

Строка 6

Перезвоните с ошибкой

done(null, data)

вызовите ваш обратный вызов с первым параметром как null (вероятно, предназначенный для указания отсутствия ошибок) и data, который будет содержать данные / результат

Дополнительное примечание:

Обратный вызов, который вы передаете removeById, должен также (желательно, если вы ничего не делаете с ним) ожидать 2 параметра, так же как и обратный вызов, переданный findByIdAndRemove

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