function onclick(){
requstHttp();// 耗时的异步执行函数
console.log("等待requstHttp这个异步执行完后,再打印");
}
直接写在在异步的回调不就完了么?
可以使用async、await
使用异步应该是用回调函数来做。
如果一定要用返回值的形式,可以让函数返回一个Promise对象,并且把调用函数的上级函数改成async function异步函数
function GetData(){
return new Promise(resolve=>{
$.ajax({
url: "地址",
dataType: "json",
success: function (res) {
resolve(res);
}
});
});
}
async function asyncCall() {
console.log('calling');
var result = await GetData();
console.log(result);
}
asyncCall();
console.log('next');
要注意的是:async function的语法和结构只是更像标准的同步函数。但不是真正的同步。
实际上在执行到await GetData()这一行时就会跳出asyncCall()函数,立即执行它后面的console.log('next');
能够等待ajax加载的只是await GetData()之后的console.log(result);这与回调方式是一样的。
如果后面的console.log('next')也要等待执行,就要把asyncCall()的上级函数也改成async function
async function asyncCall2() {
await asyncCall();
console.log('next');
}