关于promise的认识
1.不用纠结promise为什么是异步的问题,promise作为一个函数本身和同步异步没有什么关系,含有两个形参(resolve,reject),这两个形参都为函数,只是一般用来处理异步计算,它的作用是可以把异步的问题写的和同步一样。通过then()和catch()来解决异步处理问题,一般用于处理回调地狱问题。
Promise
对象有三种状态:pending
(进行中)、fulfilled
(已成功)和rejected
(已失败),一旦状态改变,就不会再变。
2.为什么说promise可以解决回调函数的问题
因为promise在执行过程中一定会返回一个状态给你,Promise
实现了链式调用,在每次调用then
之后返回的都是一个Promise
,并且是一个全新的Promise
,原因也是因为状态不可变。如果你在then
中使用了 return
,那么 return
的值会被 Promise.resolve()
包装
因此,可以很好的解决回调地狱的问题。
回调地狱
ajax(url, () => { // 处理逻辑 ajax(url1, () => { // 处理逻辑 ajax(url2, () => { // 处理逻辑 }) }) })
可写为
ajax(url) .then(res => { console.log(res) return ajax(url1) }).then(res => { console.log(res) return ajax(url2) }).then(res => console.log(res))
将promise嵌套在函数里用return的方式返回,是为了防止promise立即执行
参考:https://es6.ruanyifeng.com/#docs/promise