Как использовать обратный вызов во вложенной функции в Node? - PullRequest
0 голосов
/ 03 сентября 2018

Я получаю «TypeError: обратный вызов не является функцией», из-за чего я полагаю, что неправильно понимаю, как использовать обратные вызовы во вложенной функции.

Функция:

function getAudioInfo(filePath, callback) {
  ffprobe(filePath, { path: ffprobeStatic.path }, function (err, info) {
    console.log("ffprobe output: " + JSON.stringify(info));
    if (err) {
      console.log("getAudioInfo error: " + err);
      callback(err, null);
    } else {
      callback(null, info);
    }
  });
}

Звоните:

   function checkAudioInfo(metadata_json, callback) {

      var filePath = metadata_json['current_path'];

      getAudioInfo(filePath, function(err, info) {
          if (err) {
            callback(err);
          }
          //operations on info
          callback(null, metadata_json);
      });//end getAudioInfo

    }//end checkAudioInfo

Это неправильное использование обратных вызовов?

Редактировать:

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

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Сама функция function(err, info) является обратным вызовом, который вызывается внутри getAudioInfo!

Что такое metadata_json? Вы имеете в виду info?

0 голосов
/ 03 сентября 2018

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

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

Внутри этой функции вы пытаетесь вызвать callback. Это терпит неудачу, потому что нет никакой переменной с этим именем в области видимости.

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

Теперь вы могли бы получить ссылку на функцию обратного вызова, используя выражение именованной функции:

  getAudioInfo(filePath, function callback (err, info) {
      if (err) {
        callback(err);
      }
      //operations on info
      callback(null, metadata_json);
  });//end getAudioInfo

… но тогда вы просто называете это рекурсивно и бесконечно, что бесполезно.


re Edit:

Вы добавили вторую переменную с именем callback:

function checkAudioInfo(metadata_json, callback) {

Это имеет больше смысла.

Если , что callback не определено, то это потому, что вы не передаете ему значение, когда звоните checkAudioInfo. Вы не включили этот код.

...