【问题标题】:Pass object literal with promises to Q.all()将带有承诺的对象文字传递给 Q.all()
【发布时间】:2017-03-03 19:11:38
【问题描述】:

正如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 应用程序上执行此操作?

【问题讨论】:

  • 这个问题可以通过查看您链接到的存储库的文档来回答,或者通过编写代码并查看它是否有效。
  • 你可以试试 Bluebird 的 Promise.propsPromise.join
  • @Phil - 如果 OP 已经有 q,为什么还要加载 bluebird?
  • @Phil 我其实很喜欢 Bluebird 解决方案,我把它换掉了,似乎没有任何问题:)

标签: javascript promise q


【解决方案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;
        }, {}));
}

【讨论】:

  • Q 承诺没有 reduce 方法。我想你忘了then
猜你喜欢
  • 1970-01-01
  • 2021-04-06
  • 2016-02-01
  • 2015-07-11
  • 2014-02-02
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
  • 2015-06-06
相关资源
最近更新 更多