我有这一点的代码,我想做的就是仅在函数1完成后才执行函数0,但我无法执行它。function0上的wher((。done((始终在第一次运行中执行,并使我的代码执行其余部分。
函数0总结
function0: function(e) {
e.preventDefault();
var valid = false;
var dfd = $.Deferred();
$.when(function1(e)).done(function(v){
valid = v; // -> right here valid is undefined
dfd.resolve();
});
dfd.promise();
if(!valid) {
alertSomething();
return;
}
keepExecutingCode();
},
函数1总结
function1: function(e){
e.preventDefault();
var df = $.Deferred();
var flag = true;
App.resetDiv('#div');
getSomething();
getSomething2();
$.when(getSomething3()).done(function(){
$.when(getSomething4()).done(function(){
if (cond1()){
doSomething5();
if (cond2()){
$.when(doSomething6(),doSomething7()).done(function(var1, var2){
doSomething8(var1,var2);
flag = true;
updateSomething();
});
}else{
flag = false;
updateSomething2();
}
}else{ flag2 = false;
showSomething();
flag3 = false;
}
df.resolve(flag);
});
//PROBLEM 1 RIGHT HERE
//df.promise();
//return flag;
});
// it should be
return df.promise();
},
我知道问题可能是在其他函数上的延期,因为Inside yness insund insund off v alution始终执行解决方案,并且一旦到达if(!valid)
有效。
我在做什么错?
更新 - 已解决
function0: function(e) {
e.preventDefault();
var valid = false;
var dfd = $.Deferred();
//$.when(function1(e)).done(function(v){
// had to change .done to .then
$.when(function1(e)).then(function(v){
valid = v; // -> right here valid is undefined
if(!valid) {
alertSomething();
return;
}
// had to change the scope and make it inside the .then so that it only executes when I have the value
keepExecutingCode();
dfd.resolve();
});
dfd.promise();
},
还必须将两个.done的功能1更改为.。
非常感谢;(
看起来您没有捕获递延的错误事件。(取决于您的jQuery-version(,您可以通过两种方式执行此操作:
- 使用.fail-callback
在这里,您可以将其添加后,以便您可以响应您递延的拒绝反驳 - 替换为.done。然后使用第二个回调
在这里,您只需将函数插入以将错误处理到当时功能的第二个参数