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();