更复杂的诺言库有一个
allSettled()类似的功能
Q或
Promise.settle类似bluebird。
在jQuery中,您也可以自己实现这样的功能,并
$使用它扩展名称空间,但这仅在您经常需要且性能优化的情况下才需要。
一个更简单的解决方案是为您正在等待的每个人创建一个新的promise,即使底层的promise被拒绝,也要兑现它们。然后,您可以
$.when()毫无问题地使用它们。简而言之:
// using Underscore's .invoke() method:$.when.apply(null, _.invoke(promises, "then", null, $.when)).done(…)
更稳定:
$.when.apply($, $.map(promises, function(p) { return p.then(null, function() { return $.Deferred().resolveWith(this, arguments); });})).then(…);
您可能需要对
then回调进行一些更改,以区分final中已完成和已拒绝的结果
done。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)