Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果jquery已由以前的管道解析,则无法拒绝使用管道函数延迟的jquery_Javascript_Jquery_Jquery Deferred - Fatal编程技术网

Javascript 如果jquery已由以前的管道解析,则无法拒绝使用管道函数延迟的jquery

Javascript 如果jquery已由以前的管道解析,则无法拒绝使用管道函数延迟的jquery,javascript,jquery,jquery-deferred,Javascript,Jquery,Jquery Deferred,代码的前言非常直截了当: var handleNextPressedDeferred = $.Deferred(); $('input:button').live('click',function(){ console.log('resolving'); return handleNextPressedDeferred.resolve(); }); handleNextPressedDeferred.pipe(function(){ console.lo

代码的前言非常直截了当:

  var handleNextPressedDeferred = $.Deferred();
  $('input:button').live('click',function(){
    console.log('resolving');
    return handleNextPressedDeferred.resolve();
  });

  handleNextPressedDeferred.pipe(function(){
    console.log('rejecting');
    return $.Deferred().reject();
  });

  var handleNextPressedPromise = handleNextPressedDeferred.promise();

  handleNextPressedPromise.done(function(){
    console.log('done');
  });
  handleNextPressedPromise.then(function(){
    console.log('then');
  });
  handleNextPressedPromise.fail(function(){
    console.log('fail');
  });
在原来的按钮点击解决了延迟的问题之后,我感兴趣的是通过管道函数拒绝它

单击按钮时的预期结果是:

  • 解决
  • 拒绝
  • 失败
单击按钮时的实际结果是:

  • 解决
  • 拒绝
  • 完成
  • 然后

我在这里没有正确理解什么?我已经尝试了一百万种不同的方法,但都没有达到预期效果

.pipe
创建一个新的
延迟的
。在您的代码中,您正在“连接”
.done
。然后
失败
到未被拒绝的上一个延迟的,这就是为什么
。done
。然后执行
而不是
。失败

尝试替换此选项:

handleNextPressedDeferred.pipe(function(){
    console.log('rejecting');
    return $.Deferred().reject();
});

var handleNextPressedPromise = handleNextPressedDeferred.promise();

它会起作用的

编辑:

我看到您在代码中同时使用了
then
pipe
。我不知道您使用的是哪个版本的jQuery,但请注意,由于jQuery1.8、
pipe
then
是严格等效的,因此会返回一个新的延迟值<代码>然后
不再是
.done
.fail
的语法糖

有关更多信息,请参阅和

var handleNextPressedPromise = handleNextPressedDeferred.pipe(function(){
    console.log('rejecting');
    return $.Deferred().reject();
}).promise();