gpt4 book ai didi

javascript - 如果 jquery 由先前的管道解析,则无法拒绝使用管道函数延迟的 jquery

转载 作者:行者123 更新时间:2023-12-02 19:10:32 26 4
gpt4 key购买 nike

代码非常简单前言:

  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 创建一个新的Deferred。在您的代码中,您将 .done.then.fail “连接”到之前未拒绝的 Deferred,这就是为什么 .done.then 被执行,而不是 .fail

尝试替换这个:

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

var handleNextPressedPromise = handleNextPressedDeferred.promise();

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

它会起作用。

Fiddle here

编辑:

我发现您在代码中同时使用了 thenpipe 。我不知道您使用的是哪个版本的 jQuery,但请注意,自 jQuery 1.8 起,pipethen 是严格等效的,并且都返回一个新的 Deferred。 then 不再是 .done.fail 的语法糖。

参见jQuery deferreds and promises - .then() vs .done()pipe() and then() documentation vs reality in jQuery 1.8了解更多信息。

关于javascript - 如果 jquery 由先前的管道解析,则无法拒绝使用管道函数延迟的 jquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13798770/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com