更好的方式来解决一个整体承诺属性的对象?

我创build一个json对象作为node.js服务中的响应; 其中一些字段是asynchronous计算的,并包含在承诺中。

是否有任何优雅的方式来编写一个解决所有的属性时解决的承诺? (而不是明确地对价值进行all的replace)。

所以不要这样做:

 function calculateResponse() { var obj = { a : somePromise(), b : someOtherPromise() }; return q.all([obj.a, obj.b]).then(function(results) { obj.a = results[0]; obj.b = results[1]; return obj; }); } 

有这样的事情会很好:

 function calculateResponse() { var obj = { a : somePromise(), b : someOtherPromise() }; return q.allFields(obj); } 

这就是我现在这样做,以防万一没有人提出更好的解决scheme:

 var allAttributesResolved = function(obj) { var pairs = _(obj).pairs().unzip().value(); var keys = pairs[0]; var values = pairs[1]; return q.all(values).then(function(results) { return _.zipObject(keys, results); }); }; 

如果使用bluebird而不是q那么有一种叫做props的方法也是一样的。