Promise手把手教学

promise是异步编程的一种解决方案。回调地狱终结者。


前言-什么是promis

promise是异步编程的一种解决方案

应用场景:常见于网络请求(回调地狱)

我们封装一个网络请求的函数,因为不能立即拿到结果,所以不能像简单的 1+1=2一样将结果返回。
往往我们会传入另外一个函数,在数据请求成功时,将数据通过传入的函数回调出去。
如果只是一个简单的网络请求,那么这种方案不会给我们带来很大的麻烦。
但是当网络请求非常复杂时,就会出现回调地狱

提示:以下是本篇文章正文内容,下面案例可供参考

一、使用:(链式编程)

  //参数-函数(resolve,reject)
  //resolve,reject本身是一个函数
  new Promise(
      (resolve,reject)=>{
         setTimeout(()=>{
            //Promise是优雅的,这里只请求不处理,去then
            //成功后调用resovle
            resolve("hello world");
            //失败后调用reject
            reject("error message");
         })
      }
  ).then((data)=>{
      //处理接收到的hello world
  }).catch(err =>{
      //失败处理,箭头函数只有一个参数可以省略
  });

二、Promise的三种状态

| sync->同步 | async->异步 |

执行异步操作后有三种状态

 pending;等待状态,比如正在进行网络请求,或则定时器没有到达时间。
 fulfill;满足状态,当我们主动回调了resolve时,就处于该状态,并且会回调.then()
 reject;拒绝状态,当我们主动回调了reject时,就处于该状态,并且会回调.catch()
//不写catch,在then中传两个参数,一个成功,一个失败
new Promise(
      (resolve,reject)=>{
         setTimeout(()=>{
            //Promise是优雅的,这里只请求不处理,去then
            //成功后调用resovle
            resolve("hello world");
            //失败后调用reject
            reject("error message");
         })
      }
  ).then((data)=>{
      //处理接收到的hello world
  },(err)=>{
      //处理失败接收到的error message
  });

Promise链式调用

无论then还是catch都可以返回一个promise对象,所以代码是可以进行链式调用的。

 Promise.resolve():将数据包装成Promise对象,并且在内部回调resolve函数
 Promise.reject():将数据包装成Promise对象,并且在内部调用reject对象

简单示范:

 //原理简单示范
     new Promise((resolve,reject)=>{
         resolve(res);
     }).then((res)=>{
         return new Promise((resolve,reject)=>{
             resolve(res);
         }).then(res=>{

         })
     })

高级写法:

//升级:
         new Promise((resolve,reject)=>{
         resolve(res);
         }).then((res)=>{
             return  Promise.resolve()
         }).then(res=>{

         });

三、Promise的all方法使用

两个以及以上 的请求。要求都完成

Promise.all([

       //第一个promise
       new Promise((resolve,reject)=>{
           resolve();
       }).then(),

       //第二个promise
       new Promise((resolve,reject)=>{
           resolve()
       }).then();

   ]).then(results =>{
       //等两个都完成,使用results[0],results[1]
   })

总结

new一个promise对象,箭头函数大妙用,resolve成功调用,reject失败调用。
成功跳到.then,失败跳到.catch。
当然,也可以直接.then里面传两个箭头函数,一个成功res,一个失败err。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值