ES6的async用法

2018-08-10  本文已影响0人  江疏影子
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语句中执行

async返回promise,then添加回调函数,而return的结果作为回调函数的参数

三种方式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])里面哪个结果获得的快,就返回那个结果,不管结果本身是成功状态还是失败状态。


输出结果为:‘成功了’
上一篇 下一篇

猜你喜欢

热点阅读