Обратный вызов не ожидает выполнения функции до завершения sh - PullRequest
0 голосов
/ 21 марта 2020

У меня есть функция обратного вызова, которая возвращает объект из базы данных. Однако в моем asyn c .waterfall функция 'external' не ожидает полной загрузки объекта, что означает, что при передаче оно не определено. Это означает, что моя последняя ошибка TypeError: Cannot read property 'replace' of undefined. Что я делаю не так?

function loadModelInstance (name, callback) {
  Model.findOne({ name: name }, function (_err, result) {
    if (result) {

      return callback(_err, result.content)
    } 
  })
}

function generatedNow (modelInstance) {
  generatedKeys = generatedKeys.concat(getAllMatches(generatedRegexp, modelInstance.replace(/(\n|\r)/g, '')));
}

async.waterfall(
    [
      function loadTemplate (wfaCallback) {
        loadModelInstance(name, function (_err, modelInstance) {
          wfaCallback(_err, modelInstance)
        })
      },

      function external (modelInstance, wfaCallback) {
        generatedNow(tracking, message, modelInstance, placeholders, function (err, updatedPlaceholders) {
        })
      },
    ],
    function (err) {
        // Node.js and JavaScript Rock!
    }
);

1 Ответ

0 голосов
/ 21 марта 2020

Не могли бы вы предоставить более подробную информацию. где вы вызываете функцию «generateNow». я не вижу вызова функции для «generateNow».

Похоже, вы не правильно использовали порядок параметров. Ниже код должен работать.

async.waterfall(
  [
    function loadTemplate(wfaCallback) {
      loadModelInstance(name, function(_err, modelInstance) {
        wfaCallback(_err, modelInstance);
      });
    },

    function external(err, modelInstance, wfaCallback) {
      generatedNow(modelInstance, tracking, message, placeholders, function(
        err,
        updatedPlaceholders
      ) {});
    }
  ],
  function(err) {
    // Node.js and JavaScript Rock!
  }
);
...