promise解决了回调的问题。
多层嵌套可能会导致阅读性太低,程序不好维护,以及可能会存在回调过早过晚,回调次数过多过少的问题等问题。
因为即使是立即完成的Promise,也总会被异步调用,插在事件队列的末尾。
Promise 创建对象调用resolve(..) 或 reject(..) 时,这个Promise 的 then(..) 注册的观察回调就会被自动调度。这些被调度的回调在下一个异步事 件点上一定会被触发;
promise本身只能被决议一次,所以不会存在调用次数过多的问题,除非你注册了多次观察的回调。
如果拒绝一个 Promise 并给出一个理由(也就是 一个出错消息),这个值就会被传给拒绝回调。
如果成功的观察回调出现异常或者错误。有可能会被Promise吞掉,
async/await是基于Promise实现的,
Async/Await较Promise优势:
减少了代码量,提高了代码可读性;
const makeRequest = () => {
return promise1()
.then(value1 => {
return promise2(value1)
.then(value2 => {
return promise3(value1, value2)
})
})
}
const makeRequest = async () => {
const value1 = await promise1()
const value2 = await promise2(value1)
return promise3(value1, value2)
}