是否可以解析jquery延迟对象然后拒绝它,然后再次解析它等等。 并在每次解决时触发$。
我正在尝试这个,但它不起作用:
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();
});
});
答案 0 :(得分:0)
给定的延期只能被拒绝或解决一次。而且,由于$.when()
也会返回一个承诺,因此它也只会被拒绝或解决。所以,不,它不能像你要求的那样工作。
标准延期和承诺并非设计为通用通知系统,而是您尝试使用它们的方式。 jQuery的实现有一个可以用于此的通知功能,但标准工作是将该功能从承诺中移除,并且将以不同的方式完成。
听起来我更像是你需要一个通知系统或自定义事件,而不是单向设计的承诺。它们被解决或拒绝一次,然后再也不会改变。
答案 1 :(得分:0)
我找到了使用.progress()
和.notify()
方法的解决方案。每次拨打notify()
时,都会触发.progress()
:
var logged=$.Deferred();
logged.notify();
logged.progress(function(){
//do what you need
});