【无标题】

Promise是js中进行异步编程的解决方案

异步编程

  • fs 文件操作

    require('fs').readFile('./index.html',(err,data) =>{})
    
  • 数据库操作

  • AJAX

    $.get('/server',(data)=>{})
    
  • 定时器

    setTimeout(()=>{},2000)
    

Promise 的状态

实例对象中的一个属性 PromiseState

  • pending 未决定的
  • resolved 成功
  • rejected 失败

状态的改变只能从pending变为成功,或从pending变为失败;且只能改变一次,成功的结果一般称为value,失败的结果称为reason

Promise 对象的值

实例对象中的一个属性 PromiseResult

保存对象的【成功/失败】的值

  • resolve
  • rejcet

Promise构造函数:Promise(executor){}

  • executor函数:执行器(resolve,reject)=>{}
  • resolve函数:内部定义成功是调用回调函数value =>{}
  • reject函数:内部定义失败时调用回调函数 reason =>{}

说明:executor会在Promise内部同步调用,异步操作在执行器中执行

Promise.prototype.then 方法:(onResolve,onReject) =>{}

  • onResolve函数:成功的回调函数(value) =>{}
  • onReject函数:失败的回调函数(reason) =>{}

说明:返回一个新的Promise()对象,用于指定成功回调value或失败回调reason

Promise.prototype.catch方法:(onReject) =>{}

  • onReject函数:失败的回调函数(reason) =>{}

Promise.all方法:(promise)=>{}

  • 包含几个Promise数组

说明:返回一个新的promise,只有所有的promise都成功才成功,且成功的结果为所有promsie成功返回的结果组成的数组;只要有一个失败就直接失败,返回的结果为失败的Promise值

Promise.race方法:(promise)=>{}

  • 包含几个Promise数组

说明:返回一个新的promise,第一个完成Promise的【结果状态】就是最终的结果状态

改变Promise状态的方法

  • 通过调用resolve函数 改变Promsie状态 pending–fulfilled
  • 通过调用reject函数 改变Promsie状态 pending–rejected
  • 通过throw 抛出异常 改变Promsie状态 pending–rejected

一个Promise()指定多个成功或失败的回调函数,都会调用嘛

  • 当Promise改变为对应状态是时会调用指定的所有回调

改变Promise状态和指定回调函数谁先执行

当Promise内部是同步任务或给.then方法添加定时器时,先改变状态,再指定回调

当Promise内部是异步任务时(文件操作,数据库操作,定时任务,AJAX操作),先指定回调,再改变状态

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

由它指定的回调函数的返回值决定

Promise如何串联多个操作任务

Promise的.then()返回一个新的Promise,可以展开成.then()的链式调用

通过.then()链式调用串联多个同步/异步任务

Promise异常穿透

当使用Promise的then链式调用时,可以他通过catch在最后指定失败的回调

终断Promise链

返回一个pendding状态的Promise对象

因为then()回调会在状态改变的时候执行

34,35集 19,20代码

async函数

函数的返回结果是一个Promise对象

Promise对象的结果由async函数执行的返回值决定 跟then方法类似

await表达式

await右侧的表达式一般为Promise对象,但也可以是其他值

如果表达式是Promise对象,await返回的是promise成功的值

如果表达式是其他值,直接将此值作为await的返回值

注意:await必须写在async函数中,但async函数中可以没有await

如果await的promise失败了,就会抛出异常,需要通过try…catch捕获处理

axios

基于Promise操作方式的ajax封装包

直接用它来发送ajax,可以轻松拿到成功结果

try和try catch,util,promise异步,封装的ajax,then指定成功回调

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值