【发布时间】:2014-03-20 13:39:07
【问题描述】:
我想在执行一系列Q.all 任务时维护中间结果的聚合。
具体问题如下:
var Obj = function(first, second) {
return {
stuff: first,
otherStuff: [1,2],
nextStuff: function() { return Q.fcall(function() { return second }) }
}
};
var ab = Q.fcall(function() { return Obj("A", "B"); });
var cd = Q.fcall(function() { return Obj("C", "D"); });
var promises = [ab, cd];
我想要的是[{stuff: obj, nextStuff: "B"}, {stuff: obj, nextStuff: "D"}]的结果
现在我保留对先前结果的引用并使用 underscore.js 映射它们
Q.all(promises).then(function(stuffs) {
var promiseNextStuff = _.map(stuffs, function(x) { return x.nextStuff(); });
Q.all(promiseNextStuff).then(function(nextStuffs) {
var result = _.map(_.zip(stuffs, nextStuffs), function(obj) {
return _.object(["stuff", "nextStuff"], obj);
});
console.log("result", result);
});
});
...但我相信 Q 有更好的方法
【问题讨论】:
-
不会是
stuff: "A"和stuff: "C"吗? -
@Bergi:不,我想要对原始对象的引用,除了“stuff”之外,它可能还有其他字段。我应该说得更清楚!
标签: javascript asynchronous functional-programming promise q