Node.js 复杂的承诺序列-嵌套

Node.js 复杂的承诺序列-嵌套,node.js,promise,Node.js,Promise,在谷歌搜索了很多次之后,我一直无法确认解决这个问题的正确方法。下面的代码按预期运行,但我有一种严重的感觉,我没有以正确的方式处理这个问题,我正在为自己设置问题 以下代码由主app.js文件启动,并被传递到一个位置,以开始从mongoDB加载XML文件并将其处理到mongoDB中 exports.processProfiles=函数(路径){ 变量延迟器=q.延迟(); q(dataService.deleteProfiles())//清空Profiles集合的简单mongodb调用 .then

在谷歌搜索了很多次之后,我一直无法确认解决这个问题的正确方法。下面的代码按预期运行,但我有一种严重的感觉,我没有以正确的方式处理这个问题,我正在为自己设置问题

以下代码由主app.js文件启动,并被传递到一个位置,以开始从mongoDB加载XML文件并将其处理到mongoDB中

exports.processProfiles=函数(路径){
变量延迟器=q.延迟();
q(dataService.deleteProfiles())//清空Profiles集合的简单mongodb调用
.then(函数(删除结果){
返回loadFilenames(path);//方法以使用fs加载给定路径中的所有文件名
})
.then(函数(文件名){
//现在我们有了所有的文件名,让我们加载和保存
filenames.forEach(函数(文件名){
//这就是我认为的问题所在!
//为要处理的动态大小的文件数组启动另一个承诺链
q(loadFileContent(path,filename))//首先我们将数据加载到文件中
.then(函数(inboundFile){
//然后将XML结构解析为我的新JSON结构
//让Mongo帮我保存
返回dataService.createProfile(processProfileXML(文件名,inboundFile));
})
.完成(功能(结果){
控制台日志(结果);
})
});
})
.catch(函数(err){
延迟者.拒绝('无法处理配置文件记录:'+错误);
})
.done(函数(){
延迟者。解决(“配置文件处理完成”);
});
回报、尊重、承诺;

}
我已经很长时间没有使用Q了,但我认为您需要做的是让它知道您将要返还一系列承诺,这些承诺都需要在继续之前得到满足

此外,当您在等待一段代码上的多个承诺时,不要再嵌套,而是在所有承诺都满足后将其抛出

q(dataService.deleteProfiles())//清空Profiles集合的简单mongodb调用
.then(函数(删除结果){
返回loadFilenames(path);//方法以使用fs加载给定路径中的所有文件名
})
.then(函数(文件名){
返回q.all(
filenames.map(函数(文件名){
返回q(loadFileContent(path,filename)){/*使用您的文件名执行操作*/});
})
);
.then(函数(loadFileContentsPromises的结果){
log(‘我做了所有的事情’);
)

.catch(函数(err){})
首先,避免出现这种情况。@Bergi谢谢,这篇文章和链接的文章都很好。确保我没有包装已经是承诺的东西是关键,我需要去研究Promisify。谢谢Darren,有了你的例子和评论中的一些链接,我想我正在正确地撰写……我想!