在angualarJs或node.js中替代q.all

是否有任何替代q.all因为callback

只有当所有http调用成功时, q.all().then()才会被调用。

即使一个http调用失败,也会进入.catch部分。

有什么办法可以使它进入到q.all().then()部分,即使很less的http调用失败?

如果你真的在谈论Q库,那么Q.allSettled()就是为了这个目的:

 Q.allSettled([promise1, promise2]).then(function (results) { // results is an array of objects of the form: // { state: "fulfilled", value: ... } // or // { state: "rejected", reason: ... } }); 

如果您正在讨论AngularJS中包含的$q ,它没有这个方法,但是您可以创build自己的ad-hoc版本:

 myApp.service('allSettled', ['$q', function ($q) { return function (values) { return $q.all(values.map(function (value) { return $q.resolve(value) .then(function (result) { return { state: "fulfilled", value: result }; }) .catch(function (error) { return { state: "rejected", reason: error }; }); })); } }]); 

你可以在每个请求返回之后处理catch错误,否则返回null。

或者你可以使用蓝鸟Promise.some()并定义你的n请求的阈值。

 Promise.some([ ping("ns1.example.com"), ping("ns2.example.com"), ping("ns3.example.com"), ping("ns4.example.com") ], 2).spread(function(first, second) { console.log(first, second); }); 

您可以使用Q.allSettled()Q.any() 。 看文档:

蓝鸟更多的select。 看到:

请注意,在本地promise(还没有)中没有Promise.anyPromise.some ,没有Q.some