优势
ES7 提出的async
函数,终于让JavaScript
对于异步操作有了终极解决方案。No more callback hell。async
函数是Generator
函数的语法糖。使用 关键字async
来表示,在函数内部使用await
来表示异步。
相较于Generator
,Async
函数的改进在于下面四点:
- 内置执行器。
- 更好的语义。
- 更广的适用性。
实例
- Promise:
1 | var myFun = new Promise((resolve,reject) => { |
- Async/await:
1 | async f() { |
1 | async f() { |
1 | async function() { |
总结
放在一个函数前的async有两个作用:
1.使函数总是返回一个promise
2.允许在这其中使用await
promise前面的await关键字能够使JavaScript等待,直到promise处理结束。然后:
1.如果它是一个错误,异常就产生了,就像在那个地方调用了throw error一样。
2.否则,它会返回一个结果,我们可以将它分配给一个值。
他们一起提供了一个很好的框架来编写易于读写的异步代码。
有了async/await,我们很少需要写promise.then/catch,但是我们仍然不应该忘记它们是基于promise的,因为有些时候(例如在最外面的范围内)我们不得不使用这些方法。Promise.all也是一个非常棒的东西,它能够同时等待很多任务。