Promise及其具体方法使用

Promise产生条件

  • 标题非常多的应用场景我们不能立即知道应该如何继续往下执行。常见的一个场景就是ajax请求。得到返回值的时间也是不同的,这个时候我们就需要等待,结果出来了之后才知道怎么样继续下去。
  • ajax请求的其中一个参数,得从上一个ajax请求中获取,这个时候我们就不得不等待上一个接口请求完成之后,再请求后一个接口。当出现第三个ajax(甚至更多)仍然依赖上一个请求时,我们的代码就变成了一场灾难。这场灾难,往往也被称为回调地狱。
  • 为了解决回调地狱,为了代码更加具有可读性和可维护性,我们需要将数据请求与数据处理明确的区分开来。

Promise原生思路

Promise

Promise包含三种状态,三种状态不受外界影响,而且状态只能从pending改变为resolved或者rejected,并且不可逆。

  • pending: 等待中,或者进行中,表示还没有得到结果
  • resolved(Fulfilled): 已经完成,表示得到了我们想要的结果,可以继续往下执行
  • rejected: 也表示得到结果,但是由于结果并非我们所愿,因此拒绝执行

Promise原生思想执行实例

  • 在一个功能执行前,必须在前一个功能完成后
	function one(two){
      console.log(123)
      if(typeof two === 'function'){
        console.log('达到标准,可以执行')
        two()   //456
      } else {
        console.log('不达标,不能执行')
      }
    }
	function two(){
      console.log(456)
    }
	one(two)

Promise做法

  • new Promise().then(resolve处理函数,reject处理函数)

Promise对象中的then方法,可以接收构造函数中处理resolve状态变化,并分别对应执行。then方法有2个参数,第一个函数接收resolved状态的执行,第二个参数接收reject状态的执行。

  • new Promise().then(resolve处理函数).then(reject处理函数)
  • new Promise().then(resolve处理函数).catch(reject处理函数)

Promise中catch方法,用于处理构造函数中reject状态变化,
①、等效于第一个then中第二个参数的执行内容
②、等效于Promise构造函数执行后第二个then方法的执行内容

  • 使用Promise语法完成指定功能,方式一
	function one(two){
      console.log(123)
      return new Promise(function(resolve, reject){
        if(typeof two === 'function'){
          resolve()
        } else {
          reject()
        }
      })
    }
    function two(){
      console.log(456)
    }
    ①第一种写法
    one(two).then(function(){
      two()   //456
    }).catch(function(){
      console.log('条件不允许')
    })
    ②第二种写法
    one(two).then(two).catch(function(){
		console.log('条件不允许')
	})
  • 方式二
	function one(two){
      console.log(123)
      new Promise(function(resolve, reject){
        if(typeof two !== 'function'){
          resolve()
        } else{
          reject()
        }
      }).then(function(){
        two()
      },function(){
        console.log('答案不合适')
      })
    }
    function two(){
      console.log(456)
    }
    one(two)

Promise实际执行

function.then(①).then(②).catch(③)
1、
当function返回一个非promise时报错,
当function返回一个promise时继续执行链式编程
2、
当function返回一个promise且状态为resolve时执行①函数内容
当function返回一个promise且状态为reject时,直接执行③内容
3、
当function返回一个promise且①函数执行完成并返回一个promise
当该promise执行结果为resolve时执行③函数
当promise执行结果为reject时直接执行③函数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值