我试图执行一个需要按顺序执行语句的函数。 我使用Jquery延迟承诺,但承诺后的语句最初执行。如何按顺序执行所有语句? http://jsfiddle.net/e4wptvjv/
var test = 0;
function a(){
var deferred = $.Deferred();
setTimeout(function(){
console.log("a completed");
test++;
deferred.resolve("from a");
},500);
return deferred.promise();
};
function b(){
var deferred = $.Deferred();
setTimeout(function(){
console.log("b completed");
test++;
deferred.resolve("from b");
},200);
return deferred.promise();
}
function testFn(){
var d = jQuery.Deferred(),
p=d.promise();
p.then(a).then(b);
d.resolve();
console.log("this statement will execute after a & b completed");
return test;
}
var result = testFn();
console.log(result);
答案 0 :(得分:1)
我更新你的代码
http://jsfiddle.net/e4wptvjv/3/
这是testFn函数的代码
return a().then(b).then(function(){console.log("this statement will execute after a & b completed");return "last"});;
我先调用一个函数,最后调用b函数,然后将消息放入控制台并返回一个字符串。
答案 1 :(得分:0)
更新了小提琴:http://jsfiddle.net/dyh1jgLj/3/
与马克斯莫雷利莫雷蒂的回答不同,这个回答的确是' a'和' b'并行,但等待他们两个。
function testFn(){
$.when(a(), b()).then(function(){
console.log("this statement will execute after a & b completed");
});
}