从promise resolve-Nodejs返回更新obj时面临问题



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

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); 
});
}

我从Controller/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(步骤结束(,则控件直接返回解析(serv(;线并且它返回了新的服务对象,而没有更新它。稍后控制再次回到dir.readFiles(..函数。但现在执行这个没有用,因为我已获得新的空白服务对象。我无法通过调试解决/理解这个问题。我是Nodejs的新手。请帮助

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

当存在err时,您还应该考虑拒绝Promise,而不是忽略错误-否则,createService:中的catch不会捕获错误

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

最新更新