美文网首页
ES6的async用法

ES6的async用法

作者: 江疏影子 | 来源:发表于2018-08-10 15:28 被阅读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])里面哪个结果获得的快,就返回那个结果,不管结果本身是成功状态还是失败状态。


输出结果为:‘成功了’

相关文章

网友评论

      本文标题:ES6的async用法

      本文链接:https://www.haomeiwen.com/subject/hoakbftx.html