0


Promise

Promise是什么?

作用:支持链式调用,解决回调地狱问题
抽象表达
Promise是一门新的技术(ES6规范)
Promise是JS中进行异步编程的新解决方案,旧方案是使用回调函数
具体表达
从语法上来说:Promise是一个构造函数
从功能上来说Promise对象用来封装一个异步操作并可以获取成功失败的结果值

属于异步操作

fs

文件模块、数据库操作、ajax、定时器

Promise三个状态

pending

: 初始状态,既不是成功,也不是失败状态。

fulfilled

: 意味着操作成功完成。

rejected

: 意味着操作失败。
状态一旦从

pending

变为成功或失败就不能再改变了

Promise具体操作

  1. new Promise创建一个实例
//伪代码let p =newPromise((resolve,reject)=>{if(成功){resolve('ok')}else{reject('err')}})
  1. Promise实例有两个保存值的方法:resolve保存成功的值,reject保存失败的值
  2. then方法,第一个回调函数value => {}接收resolve保存成功的值,第二个回调函数reason => {}接收错误信息或reject保存的值
  p.then(value=>{
      console.log(value)},reason=>{
    console.warn(reason)})

平常使用也可省略第二个参数

  p.then(value=>{
      console.log(value)})
  1. catch方法,失败进入该方法
  p.catch(err=>{
      console.log(err)})
  1. finally方法,无论成功或失败都可以进入该方法
  p.finally(err=>{
      console.log(err)})

Promise函数的方法

Promise.resolve() 方法 返回一个成功/失败对象

Promise.reject() 方法 返回一个失败对象

Promise.all()方法

包含n个promise的数组,

(promises) =>{}

返回一个新的promises,只有所有成功才成功,只要有一个失败则都失败

let p1 = Promise.resolve('cccc')let p2 = Promise.resolve('cccc2')
Promise.all{[p1,p2]}

Promise.race方法

包含n个promise的数组

(promises) =>{}

返回一个新的promises,最终结果是第一个promise执行的结果

如何改变Promise状态

  1. resolve() peding => fulfilled ( resolved)
  2. reject() peding=>rejected
  3. thow '出问题了'

一个promise指定多个成功/失败回调函数,都会调用吗?

当promise改变为对应状态时会调用

改变promise状态和指定回调函数谁先谁后

  1. 都有可能,正常情况下是先指定回调函数再改变状态,但也可以先改变状态再指定回调
  2. 如何先改状态再指定回调? a.在执行器中直接调用resolve()/reject() b.延迟更长时间才调用then()
  3. 什么时候才能得到数据 如果先指定的回调,那当状态发生改变时,回调函数就会调用,得到数据 如果先改变状态,那当指定回调时,回调函数就会调用,得到数据

promise.then()返回新的promise的结果的状态由什么决定?

then()指定的回调函数执行的结果决定
排出错误 失败
返回结果不是promise对象   成功
返回对象是promise对象   是失败/成功

promise如何串联多个任务

then 返回一个新的promise

promise异常穿透

catch

中断promise链

返回一个padding状态的promise对象

returnnewPromise(()=>{})

手写Promise

标签: javascript 前端 ajax

本文转载自: https://blog.csdn.net/qq_38367703/article/details/126943815
版权归原作者 有思想的小胡子 所有, 如有侵权,请联系我们删除。

“Promise”的评论:

还没有评论