我试图在调用第三个函数之前链接两个需要完成的函数test1和test2(第一个test1然后是test2)。我在jquery中应用promise / deferred模式时遇到了问题。有人可以帮忙吗?
function test1(){
setTimeout(function() {
console.log("test1");
return 1
}, 10000);
}
function test2(){
setTimeout(function() {
console.log("test2");
return 2
}, 10000);
}
var promise1 = test1().promise();
var promise1 = test2().promise();
when(
promise1,
promise2
).then(function(a,b) {
console.log("test1 and test2 done");
});
答案 0 :(得分:3)
您的代码中没有使用任何承诺框架......
一种方法是使用jQuery Deferred(),如
function test1() {
//create a deferred object
var deferred = $.Deferred()
setTimeout(function() {
//once the taks is completed mark the promise as resolved
deferred.resolve(1);
}, 2000);
//return the promise object
return deferred.promise();
}
function test2() { //create a deferred object
var deferred = $.Deferred()
setTimeout(function() {
//once the taks is completed mark the promise as resolved
deferred.resolve(2);
}, 1000); //return the promise object
return deferred.promise();
}
var promise1 = test1();
var promise2 = test2();
$.when(promise1, promise2).then(function(a, b) {
console.log("test1 and test2 done", a, b);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
承诺的其他可能解决方案是