【发布时间】:2015-08-24 07:41:36
【问题描述】:
我正在按照自己的方式履行承诺,但我坚持使用我的用例。 我有一组转换器函数(每个函数都是一个承诺并修改一些 JSON 结构)。
让我展示一些代码。
假设这是我的 JSON 结构(数组)
var data = [{a: 1, b:2}, {a:3, b:4}];
transformFunction 是转换函数以某种方式修改数据的定义。这两个函数将c和d属性添加到上述JSON结构中:
var transformFunctions = { //
transform1: function (data) { // This function adds `c` property to each object from `a`
return new Promise(function (resolve) {
for (var i = 0; i < data.length; i++) {
data[i].c = data[i].a;
}
return resolve(data);
})
},
transform2: function (data) { // This function adds `d` property to each object from `c`
return new Promise(function (resolve) {
for (var i = 0; i < data.length; i++) {
data[i].d = data[i].c;
}
return resolve(data);
})
},
...
}
来自用户界面的用户指定他应该使用哪些转换器功能以及使用顺序。假设他选择了这样的正常顺序:
var userTransformList = ['transform1', 'transform2'];
transform1 方法应该修改数据并将结果传递给transform2 方法。
我在看:Promise.all 但它似乎不关心承诺的顺序,最重要的是它需要将上一个结果传递给下一个承诺。
【问题讨论】:
-
我只是想问一下,但是你为什么要为此使用 Promise,它不是异步的`
-
我为这个问题简化了它,在真正的用例中我可以在那里发出 db 请求或 ajax 调用。
-
我不确定,但从你描述它的方式来看,听起来你只是想管道数据或其他东西。也许有更多使用 Bluebird 经验的人会回答,我只是将它用于承诺中间件等
-
是的,管道是我正在关注的效果,但来自一系列承诺。感谢您的意见
标签: javascript arrays promise bluebird es6-promise