我需要并行处理多个请求的拒绝/解析值数组。 Angular $q
不提供此类选项($q.all
仅在每个请求都已解析时才会返回值数组!)。
是否有Angular方式,或者我应该寻找一些第三方承诺处理库,就像原来的Q?
答案 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服务中。