使功能等待完成

时间:2016-04-07 20:39:39

标签: javascript jquery

目前我有这样的功能:

a: function (val) {
    ajaxcall.done(function() {
        console.log("Done");
    }
}

我想编写另一个调用a的函数,然后等到a完成(因此.done()内的内容执行,然后继续其余的这样的事情:

console.log("beginning");
a("test");
console.log("End");

打印出来

beginning
done
end

或者有时会

beginning
end
done

取决于ajax调用是否需要很长时间?

4 个答案:

答案 0 :(得分:1)

总会打印出来:

beginning
End
Done

即使ajax调用是即时的,因为JavaScript总是在启动另一个之前完成当前的执行线程。

答案 1 :(得分:1)

对于您提供的示例,它应该在结束后打印完成

要等待你的功能结束,你可以写出类似的东西

a: function(val, done) {
  ajaxcall.done(done)
}

//or if you want to do something before declaring it's done

a: function(val, done) {
  ajaxcall.done(function() {
    console.log('done');
    done();
  })
}

然后像那样使用它

console.log("beginning");
a("test", function() {
  console.log("End");
});

答案 2 :(得分:1)

.done()可以接受一组函数来调用

function ajaxcall() {
  return new $.Deferred(function(d) {
    setTimeout(function() {
      d.resolve()
    }, Math.random() * 3000)
  }).promise()
}

function complete() {
  console.log("End")
}

function a(val) {
  ajaxcall().done([
    function() {
      console.log("Done");
    },
    complete
  ])
}

a()
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

答案 3 :(得分:0)

使用内置的AJAX回调来完成对函数的调用。

function loadME() {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
//if the data is downloaded and you receive no server errors, 
    if (xhttp.readyState == 4 && xhttp.status == 200) {
     yourcallback();
    }
  };
  xhttp.open("GET", "url for your query goes here", true);
  xhttp.send();
} 

或者在jQuery中:

$.ajax({
  url: "your api url here",
}).done(function() {
  yourcallback();
});