Voyz's Studio.

Promise函数和Async/await

字数统计: 399阅读时长: 1 min
2018/08/28 Share

优势

ES7 提出的async函数,终于让JavaScript对于异步操作有了终极解决方案。No more callback hell。
async函数是Generator函数的语法糖。使用 关键字async来表示,在函数内部使用await来表示异步。

相较于GeneratorAsync函数的改进在于下面四点:

  • 内置执行器。
  • 更好的语义。
  • 更广的适用性。

实例

  • Promise:
1
2
3
4
5
6
7
8
var myFun = new Promise((resolve,reject) => {
let a = 1;
resolve(a);
}).then(res => {
console.log(res); //a
}).catch(error => {
console.log(error);
})
  • Async/await:
1
2
3
4
async f() {
return 1
}
f().then(alert) // 1
1
2
3
4
async f() {
return Promise.resolve(1)
}
f().then(alert) // 1
1
2
3
4
5
6
7
async function() {
let promise = new Promise((resolve,reject) => {
setTimeout(() => resolve('done!'),1000)
})
let result = await promise
alert(result) // "done!"
}

总结

放在一个函数前的async有两个作用:
1.使函数总是返回一个promise
2.允许在这其中使用await

promise前面的await关键字能够使JavaScript等待,直到promise处理结束。然后:
1.如果它是一个错误,异常就产生了,就像在那个地方调用了throw error一样。
2.否则,它会返回一个结果,我们可以将它分配给一个值。

他们一起提供了一个很好的框架来编写易于读写的异步代码。

有了async/await,我们很少需要写promise.then/catch,但是我们仍然不应该忘记它们是基于promise的,因为有些时候(例如在最外面的范围内)我们不得不使用这些方法。Promise.all也是一个非常棒的东西,它能够同时等待很多任务。

CATALOG
  1. 1. 优势
  2. 2. 实例
  3. 3. 总结