【发布时间】:2017-05-26 05:32:13
【问题描述】:
我试图执行一个需要顺序执行语句的函数。 我将 Jquery deferred 用于承诺,但承诺之后的语句最初执行。如何按顺序执行所有语句? 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);
【问题讨论】:
-
代码有一个常见的误解,即异步代码可以使用 Promise 同步。没有办法让异步代码同步,如果停下来想一想,就很明显了
-
Rebornx,你已经了解
p.then(a).then(b),所以了解p.then(a).then(b).then(doSomethingElse)并不是一个巨大的步骤。 -
@JaromandaX 现在我明白了。
标签: javascript jquery promise jquery-deferred