只有在Jquery承诺完成后才执行语句?

时间:2017-01-11 12:11:53

标签: javascript jquery promise jquery-deferred

我试图执行一个需要按顺序执行语句的函数。 我使用Jquery延迟承诺,但承诺后的语句最初执行。如何按顺序执行所有语句? 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);

2 个答案:

答案 0 :(得分:1)

我更新你的代码

http://jsfiddle.net/e4wptvjv/3/

这是testFn函数的代码

return a().then(b).then(function(){console.log("this statement will execute after a & b completed");return "last"});;

我先调用一个函数,最后调用b函数,然后将消息放入控制台并返回一个字符串。

答案 1 :(得分:0)

更新了小提琴:http://jsfiddle.net/dyh1jgLj/3/

与马克斯莫雷利莫雷蒂的回答不同,这个回答的确是' a'和' b'并行,但等待他们两个。

function testFn(){
  $.when(a(), b()).then(function(){
    console.log("this statement will execute after a & b completed");
  });
}