使用数据从 NodeJS 中的另一个模块接收承诺

问题描述

我对 javascript 中的 promise 真的很陌生,所以我真的不明白我的代码中可能缺少什么。基本上我的问题是,在我的主程序中,我试图使用 async.forEachOf 遍历 json 数组,在其中调用 DAO.processData 并在完成循环后我想发送响应。如果有更好的解决方案,请提供帮助。

现在,我试图从另一个模块访问一个值,该模块返回一个 promise 对象和一个值。承诺返回模块如下所示:

var dao = {}

dao.processData = function(data) {

  var finalPromise = new Promise(()=>{});

  async.waterfall([function1,function2,function3],someCallBackFunction);

  someCallBackFunction = function () {
    console.log('in some function');
    finalPromise = new Promise( (resolve,reject) => {
      resolve(data++);
    })

    return finalPromise;
  }

}

module.exports = dao

接收数据的模块如下图。

const DAO = require('./myObject')

var myArray = [1,2]

var jsonResponse = {}

someRouterFunction = function (req,res) {

  async.forEachOf(myArray,(number) => {
    Promise.resolve(DAO.processData(number)).then( prepareResponse )
  .catch ( e => { console.log(e) } );
  },(err) => {
    res.json(jsonResponse);
  })
  
}

function prepareResponse (res) {
  jsonResponse = {
    'msg': res
  }
}

someRouterFunction();

使用此代码返回 cannot read propety 'then' of undefined。所以我在 someRouterFunction 中做了以下事情:

  Promise.resolve(DAO.processData(number)).then( prepareResponse );

这会调用函数,但我永远无法访问 res 函数中的 prepareResponse 返回值。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)