路白-Promise规范及应用

本文介绍了Promise的概念,基本语法结构,以及Promise A+规范。Promise作为异步编程的一种解决方案,可以有效避免回调地狱,实现优雅的链式调用。文章详细讲解了Promise的状态变迁、构造函数、resolve和reject方法,以及then方法的实现细节,包括如何处理回调函数的存储和执行,以及如何通过getter和setter监听状态变化。最后,文章提及了catch方法、Promise.resolve/reject的使用,以及Promise竞速的概念。
摘要由CSDN通过智能技术生成

 一.什么是promise

promise是一种异步编程的解决方案,可以用来解决回调地狱的问题,采用链式调用的方式能让代码的编写更加优雅,有条理

二.promise的基本语法结构

new Promise((resolve, reject) => {

    // 这里执行异步的操作,然后将异步操作的结果value/reson通过resolve或者reject传入then的回调函数中
    resolve(value)/reject(reason)

  }).then((res) => {
    // 此处的res就是上面resolve传入的value,在then中可以返回一个新的promise对象用来处理下一次异步操作
    // 此处可以对res进行处理
    return new Promise((resolve, reject) => {

      // 将异步操作的结果放入resole/reject进入then
      resole(value)/reject(reason)

  }).then((res) => {

    // 如果不用进行异步操作,只是对数据进行简单处理,可以使这种方式进行下一次then
    return Promise.resolve(res + '222')

  }).then((res) => {
    
    // 第三个promise的resolve处理
    
  }, (err) => {

    // 此处err是reject传入的reason
    // 其实then中可以传入两个回调函数参数,第一个参数是promise中使用的resolve后进入成功回调函数,
    // 第二个参数是promise中使用reject后进入的失败(或者说是错误)回调函数,在then中失败回调函数可以忽略,然后在最后通过下面的catch方法接受处理失败的结果

  }).catch((err) => {

    // 此处err是reject传入的reason
    // 此处可对err信息进行一些打印操作
    
  })



   // 当需要多个异步操作处理完成才对数据进行处理可使用promise.all方法,里面传入一个promise数组,then中的results是一个数组
  Promise.all([
    new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve({name: 'why', age: 18})
      }, 2000)
    }),
    new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve({name: 'kobe', age: 19})
      }, 1000)
    })
  ]).then(results => {
    console.log(results);
  })

注:then的第二个失败回调和catch方法一般只是使用其中一个就可以了,暂未尝试两个同时使用会有什么效果

三.PromiseA+规范

此规范是Promise实现的所遵循的一个规范(可百度查找到),这规范枯燥乏味,可粗略看一下

术语

规范 

 Promise state

 then

 

实现一个Promise 

new Promise((resolve, reject) => {

    // Promise大多用来处理异步操作,这里使用setTimeout模拟一个异步操作
    setTimeout(() => {
        resolve(value)/reject(reason)
    },1000)

})
.then((value) => {

    // 第一个then
    return new Promise((resolve,reject) => {
        setTimeout(() => {
            resolve(value)/reject(reason)
        },1000)
    })

}, (reason) => {})
.then((value) => {

    // 第二个then
    console.log(value)

}, (reason) => {})
.ca
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值