async && await
对比 Promise
的优点
- 处理异常
Promise
不能catch
到Promise
内部的异常//Promise写法 async function returnPromise() { return 'ok' } try { returnPromise() .then(res => { console.log(res) throw new Error('可能出错的位置') }) .catch(reason => { console.log(reason) }) } catch (e) { console.log(e) }
async && await
同步和异步所抛出的异常可以一起处理//改成 async && await (async () => { try { const msg = await returnPromise() console.log(msg) throw new Error('可能出错的位置') } catch (e) { console.log(e) } })()
- 处理
then
链
Promise
虽然对比层层回调来说已经算是很美观,但是请接下看(() => { returnPromise() .then(res => { console.log(res) //dosomething return Promise.resolve('step1') }) .then(res => { console.log(res) //dosomething return Promise.resolve('step2') }) .then(res => { console.log(res) //dosomething return Promise.resolve('step3') }) .then(res => { console.log(res) //dosomething return Promise.resolve('step4') }) })()
async && await
更加简洁(async () => { console.log(await returnPromise()) //dosomething console.log(await Promise.resolve('step1')) //dosomething console.log(await Promise.resolve('step2')) //dosomething console.log(await Promise.resolve('step3')) //dosomething console.log(await Promise.resolve('step4')) //dosomething })()
结语
对于两者的态度,笔者认为两者应该是共生的,而不是async && await
取代Promise
,毕竟前者的实现靠着后者,或者说只是后者的语法糖。毕竟,Promise.all
,Promise.race
等一些方法,目前来说处理批量异步还是算厉害的。本篇博客的意义在于让更加透彻的理解Promise
,以及async && await
这块语法糖到底好在哪里。
如果对你有帮助的话,请点一个赞吧