概念:
- Promise 是异步编程的一种解决方案,主要是为了解决"回调地狱"问题,有三种状态(pending/fulfilled/rejected),对象状态不受外界影响,一旦状态改变就不会变化。
- async/await 也是异步编程的一种解决方案,基于Promise实现的,返回的是一个Promise对象。
区别:
- promise.then属于微任务,会放到相应宏任务的微任务队列里,等宏任务里面的同步代码执行完再执行;
- async函数返回一个 Promise 对象,可以使用then方法添加回调函数。async函数表示函数里面可能会有异步方法,await后面跟一个表达式。当async函数执行的时候,一旦遇到await就会先返回,遇到await会立即执行表达式,然后把表达式后面的代码放到微任务队列里,等到异步操作完成,再接着执行函数体内后面的语句。
Promise和Async都能解决相同的问题,可以根据不同场景选择。Promise可以一直异步链式调用,Async/await对比就比较简洁。
附:
awiat的含义是等待,即async的函数需要等待await后的函数执行完成并且有了返回结果(Promise对象)之后,才能继续执行下面的代码,await通过返回一个Promise对象来实现同步的效果。