记一次失败的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));
运行结果为

可以说是非常完美的实现了需求,但是为什么说是一次失败的尝试呢?
因为题主把问题删了!!

可能是因为被人点了踩,或者是自己意识到这是反模式吧,总之我在解决这个问题的过程中获得了成长(this指向,bind函数细节,super用法,复习异步代码,混入mixin,私有字段)
今天就到这里吧,撒由那拉~~
记一次失败的StackOverflow回答的更多相关文章
- CVE-2017-0213 | 记一次失败的提权经历
环境: CVE-2017-0213下载 提权步骤: 提权失败.... 好迷啊,,,,事后查了一下补丁 我的wind7上也没装啊,然后防火墙也是关闭的 迷了迷了....
- MVC学习系列——记一次失败面试后,感想。
在此写博客之际,热烈庆祝母校苏州科技学院,正式改名为苏州科技大学. 一晃眼,从自己投身IT行业已经两年有余,期间经历了结婚.买房等人生大事,非常感谢我的老婆,谢谢她这么爱我,嫁给我这个码农,呵呵... ...
- 四、记一次失败的 CAS 搭建 之 结果总是那么伤(客户端)
==================================================================================================== ...
- 三、记一次失败的 CAS 搭建 之 服务端配置
==================================================================================================== ...
- 二、记一次失败的 CAS 搭建 之 证书配置
==================================================================================================== ...
- 一、记一次失败的 CAS 搭建 之 环境配置
==================================================================================================== ...
- HDU 4557 非诚勿扰 队列、(记一次失败的SBT尝试)
非诚勿扰 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) [Problem De ...
- 记一次失败的Linux安装
这次把整个电脑都装了Ubuntu,向Linux这条路越走越远了,也感谢社会对Linux的支持越来越完善了,才让我下定这个决心,再次表示感谢 之前都是装双系统或者在vm下安装的Linux,现在再装一次, ...
- 微信支付(公众号)爬坑记,包含 total_fee 失败和 JSAPI 签名验证失败等等
做商城类网站不免会需要做支付功能,目前在中国大陆通用的做法就是使用支付宝支付和微信支付,上一篇博文已经讲个支付宝支付. 这篇文章来讲一讲微信支付,微信支付的方式有很多种,本文主要讲 JSAPI 支付的 ...
- 老哥们,请问我做的对么?(记一次失败的st表乱搞)
今天a开始就不是很顺,然后到d,d努力读完题理解完题意,感觉自己又行了{ 问最大的jump,我觉得如果单纯贪心策略显然会t,问min,max这类rmq果断上了st表(这东西我隔离的时候写的,没想到被拉 ...
随机推荐
- perl中ENV的使用
在打印环境变量的时候可以用到.实际上是%ENV,perl中的哈希变量,里面保存的是环境变量.键是环境变量名,值是环境变量值.例如,有一个环境变量是PATH,其值为C:\windows,那么,打印这个环 ...
- MongoDB - 索引知识
索引简介 什么是索引 索引最常用的比喻就是书籍的目录,查询索引就像查询一本书的目录. 索引支持 MongoDB 查询的高效执行.如果没有索引,MongoDB 必须扫描集合中每一个文档,以选择与查询语句 ...
- Kubernetes_k8s持久化存储(亲测可用)
一.前言 新建具有两个节点的k8s集群,主节点(master节点/m节点)的ip地址是192.168.100.150,从节点(w1节点)的ip地址是192.168.100.151. 本文操作如何将po ...
- 基于LSM树的存储机制简述
下午听了关于MyRocks-PASV的研究讲座,很有意思所以学习了一下LSM树的一些简单的底层原理.现在整理一下 我们都知道目前Key:Value型的数据库普遍较之关系型数据库有着更好的表现,为什么会 ...
- 【数据库】Postgresql/PG-编写函数实现字段对应加备注
〇.资料链接 一.背景 构建分区表时,删除了表的字段备注信息 1.查询语句 select c.relname 表名, cast ( obj_description (relfilenode, 'pg_ ...
- 【每日一题】2021年12月6日-剑指 Offer 22. 链表中倒数第k个节点
输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. 例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1.2.3.4.5.6 ...
- 【大数据面试】【框架】kafka:组成、台数/参数配置、持久化、ISR队列、宕机、丢数据、重复数据、数据积压、优化各种配置(刷盘、存盘、副本、压缩)、zk、其他
一.基本信息 1.组成 生产者 broker 消费者 zookeeper:brokerid.consumer信息(不包含生产者的信息) 2.需要安装多少台 2 * (生产者的峰值生产速率 * 副本 / ...
- TinyShell(CSAPP实验)
简介 CSAPP实验介绍 学生实现他们自己的带有作业控制的Unix Shell程序,包括Ctrl + C和Ctrl + Z按键,fg,bg,和 jobs命令.这是学生第一次接触并发,并且让他们对Uni ...
- vue3 watch笔记
watchEffect 执行传入的一个函数,同时自动追踪函数中依赖到的数据,并在其依赖变更时重新运行该函数. 并且会在 组件挂载前 立即调用一次,(默认是挂载前,可通过修改 flush 属性改变,后边 ...
- <五>function的实现原理
类模版std::function是一种通用.多态的函数封装.std::function的实例可以对任何可以调用的目标实体进行存储.复制.和调用操作,这些目标实体包括普通函数.Lambda表达式.函数指 ...