传递对象文字与承诺Q.all()

时间:2017-03-03 00:36:12

标签: javascript promise q

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应用程序上做到这一点?

1 个答案:

答案 0 :(得分:1)

您只需使用几行代码就可以构建它:

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;
        }, {}));
}