从Promise解决方案返回更新obj时遇到的问题-Node.js

时间:2018-11-23 08:40:32

标签: javascript node.js express es6-promise

我在lib / rrpair / parser.js中有下面的parser.js文件。我有一个解析函数,在其中迭代目录中的不同文件并根据其内容准备服务对象。

const dir = require('node-dir');

function parse(path) {
  return new Promise(function (resolve, reject) {
      const serv = new Service();
      dir.readFiles(path, function (err, content, filename, next) {
          //getting files content & preparing/updating service object
          next();
        });
    //returning serv object
    return resolve(serv); 
  });
}

我正在从Controllers / serviceController.js下面调用上述解析函数

 const rrpair = require('../lib/rrpair/parser');

function createService(req, res) {
  rrpair.parse('./RRPair' ).then(function(message){
    console.log(message);
    res.json(message);
  }).catch(function(err){
    console.log(err);
  });
}

问题:-我正在从解析器函数返回空白服务对象。我对其进行了调试,发现parser.js中的dir.readFiles()函数可以执行,但是稍后返回服务对象之后。因此,解析器函数返回新的Service()对象,但不返回在dir.readFiles()函数中更新的已更新对象。

在调试时,我发现如果将控件转到dir.readFiles(..行,如果我按F10键(跨步),则控件将直接返回resolve(serv);行,并且它返回新的服务对象而不进行更新。以后的控件再次回到dir.readFiles(..函数内。但是现在不像我那样执行此操作了  已经有了新的空白服务对象。我无法通过调试解决/理解这一问题。我是Nodejs的新手。请帮助

1 个答案:

答案 0 :(得分:0)

resolve填充服务之后,您需要next 内部回调(否则,如果您调用resolve 外部回调,同步,首先使用Promise并没有多大意义,因为还没有异步操作有机会完成工作。

在出现Promise时,您还应该考虑拒绝 err,而不是忽略错误-否则,{{1}不会捕获错误。 }在catch中:

createService