javascript - 如何正确使用 promise/deferred 模式

标签 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 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 解决方案是

关于javascript - 如何正确使用 promise/deferred 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27104336/

相关文章:

javascript - 如何使用 javascript 获取动态加载的 swf 的大小?

javascript - 从 JSP 调用 EXTJS 方法时未捕获的类型错误和 Uncaught ReferenceError

javascript - jQuery 循环图像淡出/淡入时间间隔

javascript - 输入标记中的 onclick javascript 将获取数据库中的 id 值

javascript - 每当 <Form> 代码包含某个值时自动添加某个类?

javascript - 如何从 JSON 中创建动态表单?

javascript - 限制输入类型数字中的字符数

javascript - jQuery 在单个选择性语句中选择表的第一行和最后一行

javascript - 如何控制小数字段以允许输入多个点?

jquery - jQuery Mobile 中文本输入的水印?