【问题标题】:jQuery deferred.fail() only executes oncejQuery deferred.fail() 只执行一次
【发布时间】:2018-11-21 08:08:27
【问题描述】:

下面jQuery的延迟fail()只执行一次,为什么?

var dfd = $.Deferred();

$('button').on('click', function(){

    if(typeof lorem === 'undefined') {
        return dfd.reject();
    }
});

dfd.fail(function(){
    alert('Variable lorem is not defined');
});

https://codepen.io/bartclaeys/pen/EOooKy

预期行为:当您反复单击按钮时,警报应反复触发。

【问题讨论】:

  • 所以它确实做了它应该做的事? promises cannot be resolved or rejected more than once.
  • @KevinB 我希望它多次触发,所以我想我需要以某种方式重置承诺?
  • 你需要的不是承诺。不是承诺。比如一个事件。或者只是一个函数。
  • 只需在 click 事件中定义 deferred 并将失败处理程序作为全局函数,或者在 click 中,这取决于你
  • 呃,投反对票...为什么!?

标签: jquery promise jquery-deferred


【解决方案1】:

回答我自己的问题,下面的作品:

$('button').on('click', function(){

    var dfd = $.Deferred();

    dfd.fail(function(){
        alert('Error');
    });

    if(typeof lorem === 'undefined') {
        return dfd.reject();
    }
});

【讨论】:

  • 这正是我的建议-.-
猜你喜欢
  • 1970-01-01
  • 2017-04-10
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
  • 2021-10-16
相关资源
最近更新 更多