我有这段代码,而我想要做的只是在function1完成后才执行function0,因为返回了我需要的标志,但是我无法做到。 function0上的when()。done()总是在第一次运行时执行,并使我的其余代码执行。
function0总结
SELECT sno,dbase, SUBSTRING_INDEX(dbase, 'sims_', -1)temp
FROM school
function1总结
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();
},
我知道问题可能出在其他函数的延迟上,因为在function0内部,即使没有v值,它总是会解析,一旦到达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();
},
有效,它就是未定义的。
我做错了什么?
更新 - 已解决
if(!valid)
还必须将function1中的.done更改为.then
非常感谢;)