【发布时间】:2020-05-04 13:28:52
【问题描述】:
Promise.all 返回一个 Promise,当所有作为迭代传递的 Promise 都已实现时,该 Promise 就会实现。考虑到这一点,如何检查是否只有一个承诺得到履行?我有一段代码如下所示:
Promise.all([getPic('blah.jpg'), getPic('blah_two.jpg')]).then(
function(result) {
$('#div').hide();
}
).catch(function(result) {
$('#div').show();
})
在这里,我想等待加载任何图像,即 blah.jpg 和 blah_two.jpg。如果其中任何一个被加载,则 $('#div').hide();。但是,我的代码会检查要加载的两个图像,这不是我真正想到的。您能否帮我解决这个问题,并在加载任何图像时隐藏$('#div')。
我认为有一个Promise.any 可以满足我的想法;然而,正如 Mozilla 所说,“这是实验性的,并非所有浏览器都完全支持。”
顺便说一下,下面是我的getPic函数:
function getPic(src, div) {
return new Promise(function(resolve, reject) {
$(div).attr('src', src).on("error", function(e) {
reject( "Cannot access " + src );
})
.on("load", function(e) {
resolve();
});
})
}
【问题讨论】:
-
Promise.race()(履行或拒绝)或Promise.any()(仅履行) -
@Andreas,Promise.any() 尚不支持所有浏览器,仍处于试验阶段,但如果能得到完全支持就好了。
-
亲爱的@palaѕн。这个 raceToSuccess 函数是我想到的。然而,我无法在我的代码上实现它。请你帮帮我。
标签: jquery