promise(特点,项目中如何应用)

**

promise(特点,项目中如何应用)

**

一、promise是什么

简单来说promise就是构造函数,它就是为了解决异步编程的一种解决方案,也就是将回调函数异步编程的方法 转成 relsove和reject触发事件

promise有三种状态:

  1. 初始状态 pendind
  2. 操作成功 fulfilled
  3. 操作失败 rejected

Promise 对象的状态改变,只有两种可能:
项目中如何应用?
1、从pending变为fulfilled,就是将promise对象的状态从初始状态变为了成功状态,也就是异步操作成功时会调用,将异步操作的结果作为参数传递出去
还有一种可能就是
2.从pending变为rejected,就是将promise对象的状态从初始状态变为了失败状态,也就是异步操作失败时会调用,将异步操作爆出的错误作为参数传递出去

对象内含有7个方法,
				  then()异步请求成功后
                  catch()异步请求错误的回调方法
                  finally()请求之后无论是什么状态都会执行
                  resolve()将现有对象转换为Promise对象
                  all()此方法用于将多个Promise实例包装成一个新的promise实例。
                  race()也是将多个Promise实例包装成一个新的promise实例
                  reject()返回一个状态为Rejected的新Promise实例。
                  
有点:让回调函数变成了规范的链式写法,程序流程可以看的很清楚
缺点:编写的难度比传统写法高,阅读代码也不是一眼可以看懂

二、promise的特点

  1. Promise的状态一旦改变就无法更改
new Promise(function(resolve,reject){
        resolve();
        reject();
}).then(function(res){

}).catch(function(){

})

只会执行then中的方法,不会执行catch中的

2. then方法的参数期望是函数,传入非函数则会发生值穿透

new Promise(function(resolve,reject){
       resolve(123);
}).then('ASDASDAS').then(function(res){
       console.log(res)
})

会执行第二个then的回调

3.promise的回调是同步的,then是异步的

new Promise(function(resolve,reject){
        console.log(1);
        resolve();
}).then('ASDASDAS').then(function(res){
        console.log(2)
})
console.log(3)

输出结果为 1 3 2

4、链式调用then,上一个then的返回值是下一个then接收到的参数,如果抛出错误,会返回一个状态为reject的promise

new Promise(function(resolve,reject){
        resolve();
}).then(function(){
        return 123
}).then(function(last){
        console.log(last)
})

打印123

new Promise(function(resolve,reject){
     resolve();
}).then(function(){
      throw new Error("I'm error ")
}).then(function(last){
      console.log(last)
}).catch(function(error){
      console.log("error:"+error)
})

打印Error: I’m error
如果是then的回调中return new Error() 还是要进入下一个then中,要throw抛出错误才会进入到catch中

5.如果返回的是promise 那么会等待promise的异步执行,根据异步执行的是resolve,还是reject再进入then或者catch

new Promise(function(resolve,reject){
     resolve();
}).then(function(){
    return new Promise(function(resolve,reject){
         setTimeout(function(){
            resolve("go to then")
          },3000)
      })
}).then(function(last){
      console.log(last)
}).catch(function(error){
      console.log("error:"+error)
})

三秒之后打印:go to then

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值