jquery - 如何选择性地解析和拒绝 jquery 对象

标签 jquery jquery-deferred

是否可以解析 jquery 延迟对象,然后拒绝它,然后再次解析它,等等。 并在每次解析时触发 $.when ?

我正在尝试这个,但它不起作用:

var bindHide = $.Deferred();
var bindShow = $.Deferred();
    if ($('#userdata').is(':hidden')) {
        bindShow.resolve();
    } else {
        bindHide.resolve();
    }
    //SHOW USERDATA
    $.when(bindShow).then(function() {
        bindShow.reject();
        $('#miniWeightLevel, #miniWeightLevelTextLayer').unbind('vclick').bind('vclick', function (e) {
            showUserdata();
            $('#miniWeightLevel, #miniWeightLevelTextLayer').unbind('vclick');
            bindHide.resolve();
        });
    });     
    //HIDE USERDATA
    $.when(bindHide).then(function() {
        bindHide.reject();
        $('#minifyCross').unbind('vclick').bind('vclick', function (e) {
            hideUserdata();
            bindShow.resolve();
        });
    });

最佳答案

给定的延期只能被拒绝或解决一次。而且,由于 $.when() 也返回一个 Promise,因此它也只会被拒绝或解决一次。所以,不,它不能像你要求的那样工作。

标准 deferreds 和 Promise 并非设计为通用通知系统,这就是您尝试使用它们的方式。 jQuery 的实现有一个通知功能,您可以使用它来实现此目的,但标准工作正在使该功能脱离 promise ,并且将以不同的方式完成。

对我来说,这更像是您只需要一个通知系统或自定义事件,而不是设计为单向的 promise 。它们被解决或拒绝一次,然后就不会再改变。

关于jquery - 如何选择性地解析和拒绝 jquery 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24289897/

相关文章:

javascript - 我不明白 AJAX 回调

java - 移动时更改鼠标光标

javascript - 如何记住 NAV 的滚动位置(固定/溢出-y :scroll)

javascript - 异步任务完成后通知

javascript - 通过用户输入停止 jquery .then 链

jquery - 选择同一节点上前一个控件的第一个隐藏输入元素

jquery - 在 mousemove 上移动一个 div 到另一个 div

jquery - $.Deferred 与新的 $.Deferred

javascript - 一个接一个的 Div 动画使用延迟对象

javascript - 如果并行函数已经失败,则阻止函数运行(使用 jQuery $.when())