ES6 新特性

Promise

2022-04-13  本文已影响0人  生命里那束光

首先呢,说Promise之前我们必须先了解同步和异步。

同步和异步:

Promise应用场景:

一、Promise介绍:

  1. 是个异步的操作对象 (对象和函数的区别就是对象可以保存状态,函数不可以(闭包除外)
  2. 主要用于异步计算
  3. 可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果
  4. 可以在对象之间传递和操作promise,帮助我们处理队列

二、优缺点:

Promise 优点:
有了 Promise 对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise 对象提供统一的接口,使得控制异步操作更加容易。

Promise 缺点:
首先,无法取消 Promise,一旦新建它就会立即执行,无法中途取消。其次,如果不设置回调函数,Promise 内部抛出的错误,不会反应到外部。第三,当处于 Pending 状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。

三、使用node以后,异步promise存在的问题

这样操作存在的问题:

1.之前处理异步是通过纯粹的回调函数的形式进行处理
2.很容易进入到回调地狱中,剥夺了函数return的能力
3.问题可以解决,但是难以读懂,维护困难
4.稍有不慎就会踏入回调地狱 - 嵌套层次深,不好维护
有些情况需要多次调用服务器API,就会形成一个链式调用,比如为了完成一个功能,我们需要调用API1、API2、API3,依次按照顺序进行调用,这个时候就会出现回调地狱的问题

四、Promise具体使用规则

new Promise(
  function (resolve, reject) {
    // 一段耗时的异步操作
    resolve('成功') // 数据处理完成
    // reject('失败') // 数据处理出错
  }
).then(
  (res) => {console.log(res)},  // 成功
  (err) => {console.log(err)} // 失败
)

1、resolve作用是,将Promise对象的状态从“未完成”变为“成功”(即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;
2、reject作用是,将Promise对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。
3、promise有三个状态:

1.pending[待定]初始状态
2.fulfilled[实现]操作成功
3.rejected[被否决]操作失败
当promise状态发生改变,就会触发then()里的响应函数处理后续步骤;

promise状态一经改变,不会再变。
4、Promise对象的状态改变,只有两种可能:
从pending变为fulfilled
从pending变为rejected。
这两种情况只要发生,状态就凝固了,不会再变了。

结论:promise作为队列最为重要的特性,我们在任何一个地方生成了一个promise队列之后,我们可以把他作为一个变量传递到其他地方。

上一篇下一篇

猜你喜欢

热点阅读