猿问

回调不等待函数完成执行

我有一个回调函数,它从数据库中返回一个对象。但是,在我的 async.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!

    }

);


泛舟湖上清波郎朗
浏览 112回答 1
1回答

互换的青春

您能否提供更多详细信息。你在哪里调用“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!  });
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答