Promise是什么?

61 阅读1分钟

异步编程有哪些?

  1. fs文件操作
    require('fs').readFile('./index.html',(err,data)=>{})
  2. 数据库操作
  3. AJAX
    $.get('/server',(data)=>{})
  4. 定时器
    setTimeOut(()=>{},2000)
    ...

一.理解

1.抽象表达:
(1)Promise是JS中进行异步编程的新解决方案(旧解决方案是单纯使用回调函数)。
2.具体表达:
(1)从语法上来说:Promise是一个构造函数。
(2)从功能上来说:Promise对象用来封装一个异步操作并可以获取其成功/失败的结果值。

二.为什么要用Promise

1.指定回调函数的方式更加灵活
(1)旧的必须在启动异步任务前指定
(2)Promise:启动异步任务=>返回promise对象=>给promise对象绑定回调函数(甚至可以在异步任务结束后指定/多个)
2.支持链式调用,可以解决回调地狱问题
(1)什么是回调地狱?
回调函数嵌套调用,外部回调函数异步执行的结果是嵌套的回调执行的条件。
(2)回调地狱的缺点?
不便于阅读,不便于异常处理
(3)解决方案?
Promise链式调用

三.Promise的状态改变

1.pending变为fulfilled
2.pending变为rejected
说明:状态不可逆转,只有这两种,且一个Promise对象只能改变一次,无论成功或失败,只有一个结果数据。成功的数据一般称为value,失败的数据一般称为reason。