zoukankan      html  css  js  c++  java
  • 手写promise

    Promise 本身是同步

    真正的异步是你自己在promise内部写的代码

    开始实现promise

    大概逻辑

    1. 实例化构造函数,构造函数内部调用传入的function,把resolve和reject传给function

    2. 紧接着调用then方法,把then方法上的一些函数储存起来:(成功函数,失败函数),最终then返回了一个promise,所以还要存储一个promise实例, catch 方法

      2.1 如果是链式调用then,则全部调用,把需要的函数全部存储起来

    3. 接着是你调用resolve或者reject。promise内部修改状态pending --> resolveed 表示成功,如果调用reject则状态被修改为 rejected 表示失败,状态是不可逆的,只能改一次,保证resolve和reject函数只被调用一次

    4. 之后在resolve和reject函数内部使用异步处理(这里是为了防止resolve/reject 同步调用时 ,处理then方法劳动成果的代码执行在then方法之前,导致拿不到then方法的劳动成果)

    5. 处理then方法的成功/失败函数,将resolve/reject的结果传入成功函数,并接收返回值,作为下一个then方法的结果传给promise.resolve,reject函数不接收返回值,直接调用当前then方法的失败函数,把错误抛出去

    开始实现

    先简单实现promise的这几个方法:

    resolve

    reject

    then

    catch

     

     

    constructor调用传入的函数,把resolve/reject传进去

    先从then方法入手: 保存成功失败函数以及promise,并返回promise

     

    catch方法比较简单:保存失败函数

     

    resolve/reject

  • 相关阅读:
    MySQL行级锁和表级锁
    轮询、长轮询、长连接、socket连接、WebSocket
    Http请求的TCP连接
    TCP的三次握手和四次挥手
    面试:做过sql优化吗?
    Java线程池
    C#代码审查工具 StyleCop
    C#中图片切割,图片压缩,缩略图生成的代码
    一个对称加密、解密的方法C#工具类
    C# 音频操作系统项目总结
  • 原文地址:https://www.cnblogs.com/chefweb/p/15440774.html
Copyright © 2011-2022 走看看