【问题标题】:Why does fail() fired when there's no error in $.when()?为什么 $.when() 中没有错误时会触发 fail()?
【发布时间】:2013-12-04 13:47:46
【问题描述】:

我正在使用 JQuery v2.0.0

我正在尝试了解延迟对象,但得到了意想不到的结果。即使此处没有可见或已知错误,也会触发 fail()。

function foo1() { alert('testing'); }

$.when(foo1())
  .done(alert('success'))
  .fail(alert('fail'))

谢谢...

【问题讨论】:

    标签: jquery jquery-deferred deferred .when


    【解决方案1】:

    您不是将函数引用传递给donefail 函数,而是调用它们

    function foo1() {
        alert('testing');
    }
    
    $.when(foo1())
        .done(function () {
        alert('success')
    })
        .fail(function () {
        alert('fail')
    })
    

    【讨论】:

      【解决方案2】:

      您必须将回调作为函数传递:

      $.when(foo1())
          .done(function() {
              alert('success');
          }).fail(function() {
              alert('fail');
          });
      

      目前,您正尝试将 立即调用 alert('fail')undefined 结果注册为您的 .fail 处理程序。

      虽然您没有这么说,但您会同时看到 success fail 警报,这应该提示您做错了什么;-)

      【讨论】:

      • 是的,我知道我做错了什么。 :-) 一个简单的问题,如果我在没有“foo”函数包装器的情况下这样做是有效的还是允许的——> $.when( alert('test') ).done(function(){}).fail(function (){});
      • 仍在等待 5 分钟,以便我可以点击回答您的问题。
      • @fletchsod 在这种特殊情况下,将 alert 调用直接放入 $.when 将导致调用 done 回调 - 只有 .when 中的表达式的返回结果很重要。
      猜你喜欢
      • 1970-01-01
      • 2015-12-21
      • 2023-02-08
      • 1970-01-01
      • 1970-01-01
      • 2020-11-07
      • 2016-08-13
      • 2013-12-15
      • 1970-01-01
      相关资源
      最近更新 更多