目前我有这样的功能:
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调用是否需要很长时间?
答案 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();
});