有一位同学在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));

运行结果为



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


因为题主把问题删了!!

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

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

记一次失败的StackOverflow回答的更多相关文章

  1. CVE-2017-0213 | 记一次失败的提权经历

    环境: CVE-2017-0213下载 提权步骤: 提权失败.... 好迷啊,,,,事后查了一下补丁 我的wind7上也没装啊,然后防火墙也是关闭的 迷了迷了....

  2. MVC学习系列——记一次失败面试后,感想。

    在此写博客之际,热烈庆祝母校苏州科技学院,正式改名为苏州科技大学. 一晃眼,从自己投身IT行业已经两年有余,期间经历了结婚.买房等人生大事,非常感谢我的老婆,谢谢她这么爱我,嫁给我这个码农,呵呵... ...

  3. 四、记一次失败的 CAS 搭建 之 结果总是那么伤(客户端)

    ==================================================================================================== ...

  4. 三、记一次失败的 CAS 搭建 之 服务端配置

    ==================================================================================================== ...

  5. 二、记一次失败的 CAS 搭建 之 证书配置

    ==================================================================================================== ...

  6. 一、记一次失败的 CAS 搭建 之 环境配置

    ==================================================================================================== ...

  7. HDU 4557 非诚勿扰 队列、(记一次失败的SBT尝试)

    非诚勿扰 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) [Problem De ...

  8. 记一次失败的Linux安装

    这次把整个电脑都装了Ubuntu,向Linux这条路越走越远了,也感谢社会对Linux的支持越来越完善了,才让我下定这个决心,再次表示感谢 之前都是装双系统或者在vm下安装的Linux,现在再装一次, ...

  9. 微信支付(公众号)爬坑记,包含 total_fee 失败和 JSAPI 签名验证失败等等

    做商城类网站不免会需要做支付功能,目前在中国大陆通用的做法就是使用支付宝支付和微信支付,上一篇博文已经讲个支付宝支付. 这篇文章来讲一讲微信支付,微信支付的方式有很多种,本文主要讲 JSAPI 支付的 ...

  10. 老哥们,请问我做的对么?(记一次失败的st表乱搞)

    今天a开始就不是很顺,然后到d,d努力读完题理解完题意,感觉自己又行了{ 问最大的jump,我觉得如果单纯贪心策略显然会t,问min,max这类rmq果断上了st表(这东西我隔离的时候写的,没想到被拉 ...

随机推荐

  1. docker安装消息队列(rabbitmq)及数据库(mongo、mysql)

    解决ipv6 访问问题 nohup socat TCP6-LISTEN:36001,reuseaddr,fork TCP4:127.0.0.1:36000 > /root/ip6to4.log ...

  2. C#怎么在生成解决方案的过程中执行perl脚本(C#早期绑定)

    转载 怎么在生成解决方案的过程中执行perl脚本 早期绑定在编译期间识别并检查方法.属性.函数,并在应用程序执行之前执行其他优化.在这个绑定中,编译器已经知道它是什么类型的对象以及它拥有的方法或属性. ...

  3. 更换K8S证书可用期

    帮助文档:https://zealous-cricket-cfa.notion.site/kubeadm-k8s-24611be9607c4b3193012de58860535e 解决: 1.安装GO ...

  4. mindxdl--common--validators.go

    // Copyright (c) 2021. Huawei Technologies Co., Ltd. All rights reserved.// Package common this file ...

  5. kubeedge架构与核心设计---https://bbs.huaweicloud.com/webinar/100009

    今天是kubeedge的第一节课,今天主要带大家回顾一下云原生和边缘计算的发展历程 然后我们会重点介绍一下kubeedge这个项目,他的设计背景和核心理念与我们整体的架构 首先是我们来简单回归一下云原 ...

  6. servlet包找不到,webservlet注解无效

    把tomcat/lib/  中的annotations-api.jar和servlet-api.jar复制到jdk/jre/lib/ext/目录中就行了 mine:C:\environment\apa ...

  7. MIUI12解决安装charles抓包安装证书后还是提示证书不安全

    前言 我抓包这么长时间,这个问题我还是第一次遇到,导致我反复试验,明明安装证书还是提示不安全.我用新买的手机MIUI 12系统弄了半天 解决方案 首先下载证书这部分是一个坑,小米 MIUI 12系统下 ...

  8. Go 的windows安装与环境配置

    1.请前往go的官网下载安装包:https://golang.org/dl/ 安装你如果C盘够大比较土豪就一路next即可,在这里小编穷就安装到了D:\Program Files\Go 2.环境变量配 ...

  9. java.util.Date和java.util.Calendar

    Date date = new Date();//分配初始化一个Date()对象 Calendar cal = Calendar.getInstance();//获取一个基于当前时间的日历 int d ...

  10. Android-helloword

    环境早已配置完毕,就是后来选择API的时候出现了一点问题,唉,追求时尚,选择最新版本的API,结果就悲剧了,跑不起来,也找不到原因.后来换成Android 4.22 17API Level就行了... ...