关于promise

1.提到promise我们就不得不说一下回调地狱(回调缺点1)
回调地狱:指的是回调嵌套过多的情况,导致代码很难被看懂。

let arr=[];
function  aa(fn){
       fn('一只狗')
  }
  function bb(fn){
       fn('一只猫')
   }
   function cc(数量,callback){
     arr.push(数量)
     console.log(arr)
          if(callback){
            callback
         }
     }
     // 开始调用 如果比这再多几层,就不容易看懂了
aa(function(狗数){
    console.log(狗数)
     cc(狗数, function(){
        bb(function(猫数){
            console.log(猫数)
            cc(猫数)
        })
    })
})

Promise的目的
Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。

2.实现原理

ES6 规定,Promise对象是一个构造函数,用来生成Promise实例。通过在函数内部return 一个 Promise对象的实例,这样就可以使用Promise的属性和方法进行下一步操作了。

function 函数名(){
    return new Promise(function(resolve, reject) {
        // ... some code
          if (/* 异步操作成功 */){
            resolve(value);   // 异步操作成功时调用,把结果作为参数传递出去
          } else {
            reject(error);     // 异步失败时调用,把错误作为参数传递出去
          }

    })
}
  1. Promise 的使用
    3.1 Promise 的属性与方法
    属性
    Promise.prototype 表示 Promise 构造器的原型
    方法
    Promise.prototype.then()
    返回一个 Promise 。它最多需要有两个参数:Promise 的成功和失败情况的回调函数。
    Promise.prototype.catch()
    返回一个Promise,并且处理拒绝的情况。等价于Promise.prototype.then(undefined, onRejected)
    Promise.prototype.finally()
    finally() 方法返回一个Promise,在执行then()和catch()后,都会执行finally指定的回调函数。避免同样的语句需要在then()和catch()中各写一次的情况。
    Promise.all(iterable)
    返回一个 Promise 实例,iterable参数内所有的 promise 都resolved后,才回调完成resolve。
    Promise.race(iterable)
    返回一个 promise ,并伴随着 promise对象解决的返回值或拒绝的错误原因, 只要 iterable 中有一个 promise 对象”解决(resolve)”或”拒绝(reject)”。
    Promise.resolve()
    返回一个以给定值解析后的Promise对象。但如果这个值是个thenable(即带有then方法),返回的promise会“跟随”这个thenable的对象,采用它的最终状态(指resolved/rejected/pending/settled);如果传入的value本身就是promise对象,则该对象作为Promise.resolve方法的返回值返回;否则以该值为成功状态返回promise对象。
    Promise.reject()
    返回一个带有拒绝原因reason参数的Promise对象。
    3.2 将回调地狱中的例子,改为Promise的形式

    let arr=[];
     function  aa(){
            return new Promise(function(res,rej){
                   res('一只狗')
                   
              })
       }
       
       function bb(fn){
           return new Promise(function(res,rej){
                   res('一只猫')
              })
        }
        function cc(数量,callback){
          return new Promise(function(res,rej){
                     arr.push(数量)
                   console.log(arr)
                     res()
              })
          }
      aa()
      .then(cc)
      .then(bb)
      .then(cc)
    

可以看到使用Promise后,逻辑变得非常直观
在这里推荐大家去看一个关于Promise的博客,写的非常好。
https://blog.csdn.net/shan1991fei/article/details/78966297

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值