$ .Deferred:如何检测何时执行了每个promise

史密斯先生

我有许多异步任务需要完成,所以我使用了Promise。

我需要检测每个诺言何时已执行(已解决和已拒绝)。在那之前,我不可以继续执行。

我正在使用这样的东西:

$.when(promise1, promise2, ...).always();

但是此代码是错误的,因为该when方法具有惰性求值,并且一旦promise之一失败,它就会立即返回。因此always,一旦承诺之一失败回调也将运行。

我想在编码一个解决办法,但这种使用情况是如此普遍,也许有人已经做它已经,或者也许有这样做只使用jQuery的(如果不是,这将是很好添加的,甚至一种方式Promise.whenNonLazyPromise.when(promise1, promise2, ..., false)在未来。

这可能吗?

贝吉

更复杂的诺言库有一个allSettled()类似的功能QPromise.settle类似蓝鸟

在jQuery中,您也可以自己实现此类功能并$使用其扩展名称空间,但这仅在您经常需要且性能优化时才是必需的。

一种更简单的解决方案是为您正在等待的每个人创建一个新的promise,并即使拒绝了基础的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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

$ .Deferred:如何检测何时执行了每个promise

来自分类Dev

当每个函数返回deferred.promise时,如何链接函数数组的执行?

来自分类Dev

如何检测在CPU上执行了哪些指令?

来自分类Dev

我们如何检测哪些用户在GCS(Google云存储)中执行了哪些操作?

来自分类Dev

检测是否执行了房间破坏性迁移

来自分类Dev

如何检测何时savehtml失败?

来自分类Dev

如何检测何时加载内容?

来自分类Dev

如何检测鼠标何时停止

来自分类Dev

如何检测何时收到通知

来自分类Dev

如何检测何时savehtml失败?

来自分类Dev

如何检测何时删除文本

来自分类Dev

如何并行使用多个消息并检测所有执行何时完成?

来自分类Dev

如何查看Intellij执行了什么命令

来自分类Dev

我如何存储Promise而不是Deferred

来自分类Dev

如何测试“何时”执行的行为?

来自分类Dev

Javascript / jQuery:检测何时加载每个单独的图像

来自分类Dev

如何以22.5至67.5度之间的梯度突出显示每个像素,以执行Canny Edge检测?

来自分类Dev

如何检测用户何时离开家乡和何时回家?

来自分类Dev

如何检测用户何时更换键盘?

来自分类Dev

如何检测QLabel中的文本何时更改?

来自分类Dev

如何检测AVPlayerItem何时播放完毕?

来自分类Dev

如何检测div何时失去焦点?

来自分类Dev

如何检测iFrame何时全屏显示?

来自分类Dev

如何检测何时运行browserify?

来自分类Dev

如何精确检测何时触摸SKShapeNode?

来自分类Dev

如何检测udpclient何时接收数据?

来自分类Dev

如何检测GPUImageMovie何时完成处理

来自分类Dev

如何检测UIWebView何时完全完成加载?

来自分类Dev

如何检测用户何时离开网站?

Related 相关文章

热门标签

归档