Promise

作者: 生命里那束光 | 来源:发表于2022-04-13 17:58 被阅读0次

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

    同步和异步:

    • 同步:同步是阻塞模式。指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去。

    • 异步:异步是非阻塞模式。异步是指进程不需要一直等下去, 而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。

    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队列之后,我们可以把他作为一个变量传递到其他地方。

    相关文章

      网友评论

        本文标题:Promise

        本文链接:https://www.haomeiwen.com/subject/zhiasrtx.html