如何正确使用promise / deferred模式

时间:2014-11-24 11:58:07

标签: javascript jquery

我试图在调用第三个函数之前链接两个需要完成的函数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");
});

1 个答案:

答案 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>


承诺的其他可能解决方案是