【发布时间】:2015-03-20 17:51:27
【问题描述】:
我正在使用 Node.js 和 Bluebird 创建一些相当复杂的逻辑,包括解压缩结构化文件、解析 JSON、创建和更改多个 MongoDB 文档以及在多个位置编写相关文件。我也有相当复杂的错误处理,这取决于发生错误时系统的状态。
我很难想出一种通过 Promise 流来管理依赖关系的好方法。
我现有的代码基本上是这样的:
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);
});
};
请注意,在 promise3 之前不需要依赖项 1,并且错误处理程序需要了解依赖项。
对我来说,这似乎是意大利面条代码(而我的实际代码在很多并行控制流中要糟糕得多)。我还读到在 .then 回调中返回另一个承诺是一种反模式。有没有更好/更清洁的方法来完成我想做的事情?
【问题讨论】:
-
老实说,这对programmers.stackexchange.com 来说可能更好。
-
promise2是否依赖于promise1完成?代码暗示了这一点,但有点不清楚。 -
是的,以后出现的任何承诺都取决于之前的承诺所做的事情/它检索到的数据。
标签: javascript node.js promise bluebird