async/await和promise的区别
两者都是用来处理异步回调问题的。而async/await能将异步处理的像同步一般。
那么async/await相比于promise有什么优点呢?
-
简洁。前者不需要写.then,不需要给传入resolve和reject的匿名函数,也不需要定义data变量,节约了代码,也提升了可读性。
-
错误处理。前者可以直接通过try...catch...进行处理,而后者的错误不能被try...catch...所捕获,只能通过.catch,很麻烦。
-
条件语句处理。二者都可以通过条件语句处理,但是后者在条件语句中,又要进行.then、return等语句,嵌套很深。
-
中间值。通常会有这样的场景:需要在拿到第一次异步处理结果,调用第二次异步处理函数;第二次异步处理的结果,要和第一次的结果一起传入第三次处理函数中。这在promise中又需要层层嵌套,而async/await可以依次拿到数据处理,很简洁。
-
错误链。在promise中如果经历了多次.then,并在其中抛出了错误,则返回的错误栈不会明确的返回错误的位置;然而async/await中会明确指出错误的函数。
-
调试。promise中在.then中设置断点,不会依次经过之后的.then,而是跳出到同步代码。