回调地狱及promise

回调地狱

有俩定时器,最基本的异步

 setTimeout(()=>{
         console.log(1)
      },2000)
 setTimeout(()=>{
         console.log(2)
      },1000)

正常来看,我们得到的结果是2,1。试想我们想要输出1,2 我们可能会想到嵌套 e.g.

 setTimeout(()=>{
         console.log(1)
          setTimeout(()=>{
         console.log(2)
      },1000)
      },2000)

再多点 e.g.

setTimeout(() => {
   console.log(1)
    setTimeout(() => {
     console.log(2)
      setTimeout(() => {
       console.log(2)
        setTimeout(() => {
         console.log(2)
          setTimeout(() => {
           console.log(2)
        }, 1000);
      }, 1000);
     }, 1000);
   }, 1000);
 }, 2000);

像个大箭头一样的嵌套,极其不美观,也不好维护,这就是回调地狱。
既然有不足,就会有方法去解决它,我们可以用es6的promise来解决这个问题。

promise

一个构造函数,传递异步操作的消息,链式调用,避免层层嵌套。

a. 基本使用

  • 在一个函数内部 返回 promise 对象
  • promise 对象的内部也有回调 resolve reject
  • 它有3种状态
  1. pending 进行中
  2. resolve 成功
  3. reject 失败
function fun1 (){
  return new Promise((resolve,reject)=>{
     // 异步处理
     resolve('ok') //ok resolve 的数据 then可以接受
     
     reject('nook') // no ok catch的数据对应的就是 reject的数据
  })
}
fun1()
.then((data)=>{

})
.catch((err)=>{

})

b. 链式调用 , 可以有无数个.then只能有一个.catch

fun1()
.then(()=>{
  return fun2()
})
.then(()=>{
  return fun3()
})
.then(()=>{
  return fun4()
})
.catch(()=>{

})
链式调用中任何一个出现错误(reject() throw ) 终止执行  由 catch 捕获错误
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值