async 函数算是一个语法糖,使异步函数、回调函数在语法上看上去更像同步函数
async function asyncLoadData (urlOne, urlTwo) {
let dataOne = await loadData (urlOne)
let dataTwo = await loadData (urlTwo)
}
而await的作用:紧跟在其后面的表达式需要被等待执行结果,await可以跟promise类型也可以是普通类型(会自动转换成状态为resolve的Promise),但是如果promise的状态改变为reject整个async会停止执行,即使没有return也一样可以传入错误回调的函数。所以当一个async函数中有多个await命令时,如果不想因为一个出错而导致其与的都无法执行,应将await放在try...catch语句中执行
三种方式catch到错误
async function errorTest () {
throw new Error('this is an error');
}
1. 在 then 的回调中捕获错误
errorTest().then(
resolve => console.log(resolve),
error => console.log(error)
)
2.在 Promise 的 catch 方法中捕获
errorTest().catch(
error => console.log(error)
)
3.在 try...catch 语句中捕获
try{
errorTest()
} catch (error) {
console.log(error)
}
Promise.all和Promise.race的区别
Promise.all resolve的是一个结果数组
打印结果是一个数组但如果失败的时候是最先返回reject状态的值,而不会输出其他成功的状态
Promise.all在处理多个异步处理时非常有用,比如说一个页面上需要等两个或多个ajax的数据回来以后才正常显示
,在此之前只显示loading图标,而且Promise.all resolve状态的结果和接收时的数组顺序是一致的 就算p2的结果比p1的慢。
Promise.race的使用意思就是说,Promise.race([p1,p2,p3])里面哪个结果获得的快,就返回那个结果,不管结果本身是成功状态还是失败状态。
输出结果为:‘成功了’
网友评论