es6 Promise是什么?

2 篇文章 0 订阅

# es6 Promise是什么?
1. Promise 是一个构造函数 自带三个方法 all、resolve、reject,原型上(prototype)有then、catch等的几个常用的方法。
``` javascript
          var getUserInfo=function(){
            return new Promise((resolve,reject)=>{
              setTimeout(()=>{
                let a={
                  user:"jevons"
                } 
                if((typeof a)=="object"){
                  resolve(a)
                }else{
                  reject("error!")
                }
            },3000)
          }) 
 ```
 2.  getUserInfo函数中return了一个Promise构造函数,其中传入两个参数(resolve,reject),分别表示异步执行成功后的回调函数及异步执行失败的回调函数,
     在上面函数中,我们执行了一个异步操作setTimeout,3秒后执行判断 如果是对象回调resolve,不是回调reject。
     
```javascript
       getUserInfo().then((user)=>{
        console.log(user)//a={user:'jevons'}
      }).catch((error)=>{
        console.log(error)
      })
      
 ```
 3. 我们可以使用then方法进行成功后的回调,catch处理失败后的回调。那么这样写的意义在哪里? 假设我们定义了
     一个getUserInfo的异步请求方法,我们需要异步请求结束后再进行其它操作?我们的常规想法是在异步请求里面在执行其它的操作不就行了,那么问题来了,
     有多层回调该怎么办?Promise的优势在于,可以在then方法中继续写Promise对象并返回,然后继续调用then来进行回调操作。
     
```javascript
        var getUserInfo = function() {
         return new Promise((resolve, reject) => {
           setTimeout(() => {
             let a = {
               user: "jevons1"
             }
             if ((typeof a) == "object") {
               resolve(a)
             } else {
               reject("error1")
             }
       
           }, 3000)
       
         })
       }
       var getUserInfo2 = function() {
         return new Promise((resolve, reject) => {
           setTimeout(() => {
             let a = {
               user: "jevons2"
             }
             if ((typeof a) == "object") {
               resolve(a)
             } else {
               reject("error2")
             }
       
           }, 3000)
       
         })
       }
       getUserInfo().then((user) => {
         console.log(user)//a = {
               user: "jevons1"
             } 3秒后
         return getUserInfo2();
       }).catch((error) => {
         console.log(error)
       }).then((user) => {
         console.log(user)//a = {
               user: "jevons2"
             } 6秒后
       }).catch((error) => {
         console.log(error)
       })
      
 ```
 4. 当然你可以直接返回数据
 ```javascript
        getUserInfo().then((user) => {
         console.log(user)//a = {
               user: "jevons1"
             } 3秒后
       return getUserInfo2();
     }).catch((error) => {
       console.log(error)
     }).then((user) => {
       console.log(user)//a = {
             user: "jevons2"
           } 6秒后
           
        return  "我是直接返回的";
     }).catch((error) => {
       console.log(error)
     }).then((user)=>{
         console.log(user) //我是直接返回的
      })
 ```
     
 5. Promise的all方法提供了并行执行异步操作的能力,并且在所有异步操作执行完后才执行回调。
```javascript
    Promise
    .all([getUserInfo1(),getUserInfo2()])
    .then(function(results){
        console.log(results);
    })

```

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值