概念
①promise是异步编程的一种解决方案,最典型的就是网络请求
②封装一网络请求的函数,不能立即拿到结果,我们又不能等网络请求数据,我们只能传入另一个函数,让他去请求数据,当前函数继续执行,当请求数据成功后再通过回调函数传回来
从上往下执行,当检测到需要进行网络请求的时候,因为js是单线程,如果直接跑去进行网络请求,则用户界面将看不到任何的页面渲染和反应,即阻塞,所以每当有网络请求的时候,都会额外分出异步任务,既保证了网络请求,也保证了与用户的交互,最后当网络请求完成就把数据回调当前位置
③promise在有异步操作时使用,使用promise对这个异步操作进行封装
④promise会让异步操作变得优雅,结构清晰,逻辑清晰,不会陷入异步地狱
⑤即把嵌套编程改为链式编程,每个异步函数都封装promise
来看一个例子
有这样一个异步操作,我们对他进行封装
resolve和reject都是函数
但如果有多个网络请求按照我们之前的做法,下面只是3个,如果更多呢,这就陷入了回调地狱
我们采用promise对上面的代码进行优化
①resolve是必须得有的,相当于允许你往下继续执行,接着调用then()
②虽然我们的代码是变多了,但是逻辑会变得很清晰,每一次网络请求内容和结构都可以很清晰的看出来,不会连括号谁对谁都不知道,你细品
除了resolve还有reject,看例子
调用resolve()返回成功,调用reject返回失败
链式编程
我们有这样一个需求,有字符串aaa,后面追加上111
即给resolve传递一个参数‘aaa’,然后将这个参数res传递给第二个promise的rosolve,加上对应的值再输出
我们可以把上面的代码进行优化,即直接调用promise的resolve
我们可以把上面的代码再进行优化,即省略掉new promise,直接返回值
如果中间出现了错误,我们只需要在对应位置调用promise的reject再catch获取即可
以上就是链式编程
下面补充一点,promise的3种状态
①pendind:等待状态,正在网络请求或者时间还没到
②fulfill:满足状态,当主动回调resolve时,就处于该状态并且回调then
③reject:拒绝状态,主动回调reject时,并且回调catch
promise的All方法
概念:当须要有2个异步事件及以上需要同时完成才能进行下一步时,可使用Promise.all([]),返回数组对象
看例子
返回数组即两个异步请求请求到的数据
以上就是promise的内容