将带有承诺的对象文字传递给 Q.all()

Pass object literal with promises to Q.all()

this question 中所述,Angular promise 库 $q 可以接受包含一堆 promise 的对象,并且在 .then() 函数中,您可以使用对象键检索结果:

$q.all({
    result1: foo(),
    result2: bar()
})
.then(function(results) {
    var fooData = results.result1;
    var barData = results.result2;
});

常规 Q 库可以实现这样的功能吗?如何在我的 Node.js 应用程序上执行此操作?

您始终可以只用几行代码构建它:

function all( object ){
    if(Array.isArray( object )) 
        return $q.all( object );

    var keys = Object.keys(object);
    return $q.all(keys.map(key => object[key]))
        .then(values => values.reduce((acc, value, index) => {
            acc[keys[index]] = value;
            return acc;
        }, {}));
}