等待所有承诺解决和/或拒绝?

时间:2015-11-27 08:08:33

标签: angularjs angular-promise

我需要并行处理多个请求的拒绝/解析值数组。 Angular $q不提供此类选项($q.all仅在每个请求都已解析时才会返回值数组!)。

是否有Angular方式,或者我应该寻找一些第三方承诺处理库,就像原来的Q?

1 个答案:

答案 0 :(得分:4)

据我所知,Angular $ q服务不提供此功能。但是,它可以在Kris Kowal(原始)Q中以allSettled的形式获得。

来自the docs的示例:

Q.allSettled(promises)
.then(function (results) {
    results.forEach(function (result) {
        if (result.state === "fulfilled") {
            var value = result.value;
        } else {
            var reason = result.reason;
        }
    });
});

您可以查看the source code此方法并在Angular中实现它

/**
 * Turns an array of promises into a promise for an array of their states (as
 * returned by `inspect`) when they have all settled.
 * @param {Array[Any*]} values an array (or promise for an array) of values (or
 * promises for values)
 * @returns {Array[State]} an array of states for the respective values.
 */
Promise.prototype.allSettled = function () {
    return this.then(function (promises) {
        return all(array_map(promises, function (promise) {
            promise = Q(promise);
            function regardless() {
                return promise.inspect();
            }
            return promise.then(regardless, regardless);
        }));
    });
};

但我的建议是使用标准Q库并将其包装在Angular服务中。