我正在使用Node.js和Bluebird创建一些相当复杂的逻辑,包括解压缩结构化文件,解析JSON,创建和更改几个MongoDB文档,以及在多个位置编写相关文件.我还对所有这些进行了相当复杂的错误处理,具体取决于发生错误时系统的状态.
我很难想出通过承诺流来管理依赖关系的好方法.
我现有的代码基本上是这样的:
var doStuff = function () {
var dependency1 = null;
var dependency2 = null;
promise1()
.then(function (value) {
dependency1 = value;
return promise2()
.then(function (value) {
dependency2 = value;
return promise3(dependency1)
.then(successFunction);
});
})
.catch(function (err) {
cleanupDependingOnSystemState(err, dependency1, dependency2);
});
};
Run Code Online (Sandbox Code Playgroud)
请注意,在promise3之前不需要dependency1,并且错误处理程序需要知道依赖项.
对我而言,这似乎是意大利面条代码(而且我的实际代码在很多并行控制流程中更糟糕).我还读过,在.then回调中返回另一个承诺是反模式.是否有更好/更清洁的方式来完成我想要做的事情?