当前位置: 首页 > 面试题库 >

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

曾河
2023-03-14
问题内容

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

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

我正在使用这样的东西:

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

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

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

这可能吗?


问题答案:

更复杂的诺言库有一个allSettled()类似的功能QPromise.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



 类似资料:
  • 我想知道在多个按钮的列表中按下了哪个按钮。例如,如果按下了第二个按钮,则代码会检测到按下第二个向下的按钮,并返回类似于 。但是,我不知道该怎么做。当我搜索时,jQuery参与其中,但我没有使用jQuery。代码如下: 我尝试使用EventListner,通过将EventListner添加到创建的每个按钮,但这并不能区分单个按钮。请注意,每个按钮都有一个id为和一个类。 如果有人能帮忙,谢谢!

  • 问题内容: 有什么方法可以检查Go程序是否在运行时启用了编译功能(例如,用于日志记录/信息目的)? 我检查了文档以及明显的位置(),但找不到任何东西。 问题答案: 据我所知,没有对此的简单检查,但是启用了 build标签后,您就可以利用它了。 我创建了一个新目录,并在其中放置了两个文件: : : 由于使用了build标签,将仅编译两个文件之一。 这也是围棋标准库是怎么做的(,),但由于这是一个内部

  • 我的模型逐渐变慢,速度不可接受(即从每秒200次滴答声到一次滴答声的几秒钟)。我想了解这个问题的原因。最简单的方法是什么来检查模型的哪个部分越来越耗费时间?我以前试过使用其他java探查器,但不好理解。

  • 问题内容: 我一直在开发Android应用程序,我每小时需要执行1个任务。我使用以下代码: 它对我有用,但是我的客户告诉我该任务只能工作1次,而不能工作1个小时。我在哪里弄错了?请告诉我。谢谢。 问题答案: 根据您的代码,ALARM_PERIOD为1000L,作为重复间隔。因此,我怀疑警报会在每1000毫秒内触发一次。 如果您设置每小时的重复间隔,则应为3600000L。并请注意,如果电话重新启动

  • 问题内容: 我正在尝试将ScalaTest合并到我的Java项目中。用ScalaTests替换所有JUnit测试。一方面,我想检查Guice的Injector是否注入正确的类型。在Java中,我有这样的测试: 但是我在使用ScalaTest做同样的问题: 它抱怨说,价值是不是成员/ / 。我不能在Scala中使用这种方式吗? 问题答案: Scala不是Java。Scala只是没有运算符,而是有一个

  • 我有Spark 2.1.0运行在一个有N个从节点的集群上。每个节点有16个内核(8个内核/cpu和2个cpu)和1个GPU。我想使用map进程启动一个GPU内核。由于每个节点只有1个GPU,我需要确保两个执行器不在同一个节点上(同时)尝试使用GPU,并且两个任务不会同时提交给同一个执行器。 如何强制 Spark 每个节点有一个执行程序? 我尝试了以下方法: -设置:< code > $ SPARK