async
es7新增async 函数,async 是异步 的意思,可以用于声明一个异步的 function。
<script>
async function show(){
return "异步"
}
console.log(show());//async返回的是Promise对象
show().then(res=>{
console.log(res);
})
</script>
await
await 可以认为是 async wait 的简写。await 用于等待一个异步方法执行完成。
await 必须与async 配合使用(async要放在await最近一个函数的外面),否则会报错。
await后面可以是表达式也可以是一个promise,
在await下面的代码必须等待await执行完之后才能再执行。
封装统一接口地址
<script>
function axios(url) {
return new Promise(function (resolve, reject) {
$.ajax({
url: url,
success: function (res) {
resolve(res) //成功回调
},
error: function (err) {
reject(err) //失败回调
}
})
})
}
async function getAsync() {
var a1 = await axios('data/data.json') //外面传入不同的接口路径
var a2 = await axios('data/data1.json')
console.log( a1, a2)
}
getAsync()
</script>
async await 是解决异步的终极方案
<script>
function axios(url) {
return new Promise(function (resolve, reject) {
$.ajax({
url: url,
success: function (res) {
resolve(res) //成功回调
},
error: function (err) {
reject(err) //失败回调
}
})
})
}
async function getAsync() {
var a1 = await axios('data/data.json')
if (a1) {
var a2 = await axios('data/data1.json')
console.log('a2的结果执行了')
}
else {
var a3 = await axios('data/data2.json')
console.log('a3的结果执行了')
}
}
getAsync()
</script>
使用async await 将异步变为同步,就会存在先执行的代码出错导致下面代码无法执行的问题。如:网络请求不可控,会影响后面代码执行
解决问题的方法:把await 放到 try 中进行执行,如有异常,就使用catch 进行处理
js原生:
try{放网络请求可能出错} catch{捕获错误}
<script>
function axios(url) {
return new Promise(function (resolve, reject) {
$.ajax({
url: url,
success: function (res) {
resolve(res) //成功回调
},
error: function (err) {
reject(err) //失败回调
}
})
})
}
async function getAsync() {
try {
var a1 = await axios('data/data.json')
var a2 = await axios('data/data1.json')
console.log(a1, a2)
} catch (error) {
console.log('捕捉错误异常,不影响后续代码执行', error.status);
}
//后边有代码也不会影响执行
console.log(666);
}
getAsync()
</script>