ECMAScript 2017 之 async/await 异步函数

发布:elantion 日期:2019-04-12 阅读:261 评论:0

现在已经是2019年了,才想起要写ECMAScript 2017的更新内容,由于这版本更新内容比较多,我分开几篇文章来写吧,希望可以写得详细和深入点。
如果你是个初学者,建议看一下我之前写的文章:https://www.lazycoffee.com/articles/view?id=58ab09eea072b332753d9774 ,然后再看这里,会更好地理解我接下来说的内容。

异步函数(Async function)

其实这个功能早在2016年就流行起来了,只不过当时还不是正式纳入标准中,所以很多人都不怎么敢用,怕以后要改回来。终于在2017这个版本中纳入进来了,大家可以放心吃用。看一下使用假代码例子:

const getUserInfo = async () => {
    const userInfo = await ajax.post(url, payload);
    return userInfo;
};

在异步函数出现之前,我们需要把ajax请求的结果放到回调函数里处理,但现在你可以简单地视之为顺序执行,代码看起来简洁明了。

注意

1、异步函数是顺序执行,在不需要顺序执行的情况下,建议都使用Promise.all(),进行同步执行。
2、异步函数只能在当前函数体内使用await,在子函数体内(例如:forEach(()=>{//...}))是不允许使用的(除非子数也是异步函数才可以,例如:forEach(async()=>{//...})。
3、异步函数return的是一个Promise对象,不是最终结果,需要使用thenawait才能取得最后的结果,例如上面的例子里,获取用户信息需要这样处理 getUserInfo().then(userInfo=>{//...});
4、对于只执行不需要结果的函数,可以不使用await,不必浪费时间等待结果。