javascript中同步函数执行中的问题

issue in synchronized function execution in javascript

本文关键字:问题 执行 函数 同步 javascript      更新时间:2023-10-25

我正在尝试同步其中包含AJAX调用的三个函数。

main(){
compileTemplate();
}
compileTemplate(){
func1();
func2();
func3();
}
each func has structure like :
func(){
$.when($.get(url)).then(func(d)
{//do something});

每个func()都是自己完成的。我需要当func1完成时,func2应该开始。

检查

 $.when(func1()).then(func2()); 

但它不起作用。请大家有任何想法。

确保func1func2func3的返回值为promise:

function func1() {
    var d = new $.Deffered();
    setTimeout(function () {
        d.resolve();
    }, 1000);
    return d.promise();
}
function func2() {
    return $.ajax(/* .. */);
}
function func3() {
    return /* etc */
}

然后你可以:

$.when(func1()).then(func2).then(func3); // notice the () or lack thereof

或者:

$.when(func1()).then(function () {
    return func2();
}).then(function () {
    return func3();
});

如果你不知道func1func2func3是否总是返回承诺,这仍然有效,但你等不及了。


如果你这样做:

$.when(func1()).then(func2()).then(func3());

func1func2func3将立即调用,而不是串行调用。这相当于:

var a = func1();
var b = func2();
var c = func3();
$.when(a).then(b).then(c);
//or
$.when(a, b, c);
function func1() {
  if (ajaxObject.readyState == 4 && ajaxObject.status == 200) {
  ajaxObject.onreadystatechange = func2;
  ajaxObject.send();
  }
}
function func2() {
  if (ajaxObject.readyState == 4 && ajaxObject.status == 200) {
  ajaxObject.onreadystatechange = func3;
  ajaxObject.send();
}
function func3() {
}