码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 记一次失败的StackOverflow回答


    有一位同学在StackOverflow上提问,他想创建一个 Future 类,异步的实现 Future 的构造,当构造完成之后自动调用 .then 方法,执行后面的逻辑

    class Features {
      features = null
      constructor(){
        fetchFeatures()
      }
      async fetchFeatures() {
        this.features = await fetch('https://api.github.com/'))
      }
    }
    
    const featuresInstance = new Features();
    featuresInstance.then((res) => console.log(featuresInstance.features));
    

    我第一眼想到的是继承 Promise 但是继承 Promise 是行不通的,具体请看 这里
    简单来说就是 Promise 的运行需要运行时提供魔法,不能简单的通过 super 构造函数传参来执行,另外即便可以传参,也无法使用this,起不到题主要求的封装的效果

    首先说明题主的需求是一个伪需求,异步加载资源可以通过Promise来实现,没必要封装到构造函数里

    下面给出题主要求的伪需求的实现方式

    class Features {
      features = null
      #prom = null
      constructor(){
        return Object.assign(this,this.#prom = new Promise(this.fetchFeatures.bind(this)))
      }
      then(callback) {
        return this.#prom.then(callback)
      }
      async fetchFeatures(resolve) {
        resolve(this.features = await fetch('https://api.github.com/'))
      }
    }
    
    const featuresInstance = new Features();
    featuresInstance.then((res) => console.log(featuresInstance));
    

    运行结果为
    image
    可以说是非常完美的实现了需求,但是为什么说是一次失败的尝试呢?


    因为题主把问题删了!!😢😢😢

    image

    可能是因为被人点了踩,或者是自己意识到这是反模式吧,总之我在解决这个问题的过程中获得了成长(this指向,bind函数细节,super用法,复习异步代码,混入mixin,私有字段)

    (注意mixin是向prototype中assign目标对象,我这里并不是正规mixin)

    今天就到这里吧,撒由那拉~~

  • 相关阅读:
    vue3验证码倒计时60秒(自用)
    Janus VideoRoom信令分析--public、subscribe
    My Sixty-seventh Page - 0-1背包问题理论 - By Nicolas
    【Java 进阶篇】JDBC工具类详解
    Python数据分析之Excel
    国自然热点 | 一文了解铁死亡及其研究思路
    incarnation flashback database 时可以 offline 不符合的 datafile
    ENVI: 如何创建GLT文件并基于GLT对图像进行几何校正?
    C现代方法(第10章)笔记——程序结构
    六、02【Java 多线程】之线程基础知识
  • 原文地址:https://www.cnblogs.com/dou-fu-gan/p/17112393.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号