promise

promise https://promisesaplus.com/
//目前低版本浏览器 ie 不支持, 需要polyfill es6-promise (这个包实现了pormise)

高版本浏览器都支持了pormise

1、Promise 是一个类,天生的,类中需要传入一个executor 执行器,默认会立即执行
2、promise 内部会提供两个方法 ,可以更改 promise 的 状态
pormise 有 3个状态 等待态 PENDING,成功态RESOLVED,失败态REJECTED
promise 是为了解决异步问题的 ,恶魔金字塔,并发异步处理
resolve 触发成功(成功的内容) reject 触发失败(失败的内容) undefined
如果一旦promise 成功了,就不能失败
如果一旦promiee 失败了,就不能成功了,失败的情况 1)调用了reject 、2)抛出异常

//promise可以解决链式调用的问题,then.then
let promise = new Promise((resolve,reject) =>{
  resolve('失败率')//普通值意味着不是一个promise
  //throw new Error('失败了')
})
promise.then(data=>{
  return data//then 方法中可以返回一个普通值(不是promise,会把这个结果放到下一个then的成功的回调中
}).then(data =>{
  return new Promise((resolve,reject) =>{//如果返回的是一个promise 那么会采用这个promise的结果
    setTimeout(() =>{
      resolve('hello')
      //throw new Error('失败了')
    })
  })
}).then(data =>{
  console.log(data)
}).then(data =>{
  return new Promise((resolve,reject) =>{
      reject('this is error')
    })
}).then(()=>{

},err =>{
  console.log('error,失败里返回的值,在下层接收到的undefined,是一个普通值,会走下层的成功的回调');//失败返回的undefined ,也是普通值,如果在失败的函数中返回的普通值或者是成功的promise也会走到外层的promise的成功中
  //return undefined
}).then((data)=>{
  console.log(data)//上层返回的undefined
  throw new Error('抛出一个错,走下层的失败')

}).then(()=>{}).catch(err=>{//捕获错误,先找距离自己最近的err ,如果没有错误抓捕,会找到最终的catch方法
  console.log('catch',err)
}).then(data=>{
  console.log(data)
  console.log('success')
},err=>{
  console.log(err)
})

什么时候走下层成功:1)在then 中返回的是一个普通值(then 或者 err中返回的普通值), 这些返回的都是普通值 2)返回的是一个promise 函数(返回的是成功的)
什么时候走下层的失败:1)返回的是一个promise函数(返回的是失败的)2)是一个抛出的错误 throw new Error(‘xxxxxx’)
catch 的特点死如果都没有写错误处理(一层层找)会找到catch ,catch 也是一个then,catch完还可以写then

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值