我正在尝试链接两个函数 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 promise2 = test2().promise();
when(
promise1,
promise2
).then(function(a,b) {
console.log("test1 and test2 done");
});
最佳答案
您还没有在代码中使用任何 promise 框架...
一种方法是使用 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>
其他可能的 promise 解决方案是
- > html5 promise
- > Q
- > rsvp
关于javascript - 如何正确使用 promise/deferred 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27104336/