Promise的介绍与基本使用


1. Promise 介绍

1.1 Promise是什么?

抽象表达:

  • Promise是一门新的技术(ES6规范)
  • Promise是js中进行异步编程的新解决方案
    (旧解决方案是单纯使用回调函数)

具体表达:

  • 从语法上来说:Promise是一个构造函数,可以进行对象实例化
  • 从功能上来说:Promise对象可以用来封装一个异步操作,并可以获取其成功或失败的结果值

(异步编程): 旧解决方案是单纯使用回调函数
fs 文件操作

require('fs').readFile('./index.html', (err,data) => {})

数据库操作
AJAX

$.get('/server', data => {})

定时器

setTimeout(() => {}, 2000)

1.2 为什么要使用Promise?

1.2.1 支持链式调用,可以解决回调地狱问题(这点很重要)

什么是回调地狱?

  • 回调函数嵌套调用,外部回调函数异步执行的结果嵌套的回调执行的条件
asyncFunc1(op, (...args1) => {
  asyncFunc2(op, (...args2) => {
    asyncFunc3(op, (...args3) => {
      asyncFunc4(op, (...args4) => {
        // some operation
      })
    })
  })
})

回调地狱的缺点?

  • 不便于阅读
  • 不便于错误处理

1.2.2 指定回调函数的方式更加灵活

  1. 旧的:必须在启动异步任务前指定
  2. promise:启动异步任务 => 返回promise对象 => 给promise对象绑定回调函数(甚至可以在异步任务结束后指定多个)

2. Promise 体验

一个抽奖小游戏
先用单纯用定时器实现:
在这里插入图片描述
下面来尝试用promise实现:

  • Promise()实例化接收一个参数,是函数类型
  • 这个函数有两个形参,resolvereject,也都是函数类型
  • 当异步任务成功时调用resolve(),异步任务失败时调用reject()
  • resolve()调完之后会将promise对象的状态设置为成功reject()调完之后会将promise对象的状态设置为失败
  • then方法的调用:它有两个参数,都是函数类型
  • 第一个参数是对象成功时的回调,第二个参数是对象失败时的回调

在这里插入图片描述


再加一个小需求,把那个生成的随机数一起alert出来:
上面介绍到:promise对象除了封装异步操作以外,还可以获取成功或失败结果值

我们在这里可以把那个生成的随机数num当成是结果值,将它传给resolve()reject()

  • 我们在成功的时候会调用resolve(),可以把成功的结果传给resolve()函数,失败的结果传给reject()函数
  • 等到了then()方法里面,就可以拿到并处理成功和失败的结果

在这里插入图片描述


3. Promise 练习使用

3.1 fs读取文件

在这里插入图片描述

promise改写:
成功的时候调用resolve(),失败的时候调用reject(),并将成功和失败的结果分别传进去,在then()方法中再分别处理
在这里插入图片描述


3.2 AJAX请求

在这里插入图片描述
promise改写:
成功的时候调用resolve(),失败的时候调用reject(),并将成功和失败的结果分别传进去,在then()方法中再分别处理
在这里插入图片描述


4. Promise 练习封装

4.1 封装fs读取文件操作

  • 封装一个函数:mineReadFile,来读取文件内容
  • 参数:path,为文件路径
  • 返回值:promise对象

在这里插入图片描述

调用的时候可以接then方法,因为返回值就是一个promise对象
在这里插入图片描述


4.2 封装AJAX发送get请求

  • 封装一个函数:sendAJAX ,发送 GET ajax请求
  • 参数:url
  • 返回值:promise对象

在这里插入图片描述
调用:
在这里插入图片描述


5. Promise对象的状态属性介绍

Promise状态指的是其实例对象中的一个属性:PromiseState
有三种可能值:

  • pending:未决定的
  • resolved \ fulfilled:成功
  • rejected:失败

状态的改变只有两种可能:

  1. pending => resolved
  2. pending => rejected

而且promise对象只能改变一次,无论变为成功还是失败,都会有一个结果值
成功的结果数据一般称为value,失败的结果数据一般称为reason


6. Promise对象的结果属性介绍

实例对象中的另一个属性:PromiseResult
保存着异步任务成功失败结果
只有resolve()reject()才能修改这个属性值


7. Promise的工作流程

在这里插入图片描述

  • 首先通过new Promise()创建一个对象,在promise内部封装异步操作
  • 如果异步操作成功,则调用resolve()函数
    resolve()函数一旦被调用,则将promise对象状态改为resolved成功
  • 状态为成功时,调用then()方法就会调用其第一个参数
  • then()方法的返回结果是一个新的promise对象

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值