promise

116 阅读1分钟

es6中的一个特性,他是一种异步编程的解决方案

new Promise((resolve,reject)=>{   
    setTimeout(()=>{      
        //成功时候调用resolve      
        resolve('hello World');      
        //失败时候调用reject      
        reject('error Message')   
    },1000)
}).then((data)=>{   
    console.log(data)
}).catch((err)=>{   
    console.log(err);
})

promise方法有两个参数resolve,reject,这两个参数也是两个方法。成功时候调用resolve,失败时候调用reject   成功时把参数传给.then方法处理,失败时用catch方法获取失败信息   

异步操作后会有三种动态:

pending:等待状态,如正在网络请求,或者定时器没到时间

fulfill:满足状态,当我们主动回调resolve时候,就是该状态,并回调.then()

reject:拒绝状态,并回调.catch()

链式调用:

<script>   
    new Promise((resolve,reject)=>{      
        setTimeout(()=>{         
            //成功时候调用resolve         
            resolve('hello World');         
            // //失败时候调用reject         
           reject('error Message')      
        },1000)   
     }).then((data)=>{      
            console.log(data);      
            return new Promise((resolve)=>{         //第一种链式写法
                resolve(data+'111')      
            })   
     }).then((data)=>{      
            console.log(data);      
            return Promise.resolve(data+'aaa')       //可以用第一种,这事第一种的简单写法
     }).then((data)=>{      
            console.log(data);     
             return data+'bbb'             //这是最简单的写法
      }).then((data)=>{      
            console.log(data)   
    })
</script>

reject参数的方法和这种差不多,当不用第一,第二种时,可以用throw直接抛出异常,再用catch接受

Promise.all([

  new Promise(()=>{

  }),

 new Promise(()=>{

  }),

]).then

当有两个异步请求要求同时满足时候,用all方法,all方法里面可以是数组形式,可以放多个promise.