JQuery 完成后不停止执行
JQuery when done not stopping execution
我有这段代码,我想做的是仅在 function1 完成并返回我需要的标志后才执行 function0,但我做不到。 function0 上的 when().done() 始终在第一个 运行 上执行,并使我的其余代码执行。
function0 总结
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();
},
我知道问题可能出在其他函数的 deferred 上,因为在 function0 内部它总是执行解析,即使没有 v 值,一旦它到达 if(!valid)
valid is undefined.
我做错了什么?
Update - It's solved
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();
},
还必须将 function1 中的 .done 更改为 .then
非常感谢 ;)
我有这段代码,我想做的是仅在 function1 完成并返回我需要的标志后才执行 function0,但我做不到。 function0 上的 when().done() 始终在第一个 运行 上执行,并使我的其余代码执行。
function0 总结
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();
},
我知道问题可能出在其他函数的 deferred 上,因为在 function0 内部它总是执行解析,即使没有 v 值,一旦它到达 if(!valid)
valid is undefined.
我做错了什么?
Update - It's solved
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();
},
还必须将 function1 中的 .done 更改为 .then
非常感谢 ;)