记一次失败的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表(这东西我隔离的时候写的,没想到被拉 ...
随机推荐
- js把秒数转换为HH:MM:SS及时分秒格式
/** * 转为HH:MM:SS * @param second * @returns {string} * @private */ var _showTime = function (second) ...
- Spring Cloud Loadbalancer
Spring Cloud Loadbalancer---客户端负载均衡器 springcloud 2020.0.1 版本之后 删除了eureka中的ribbon,替代ribbon的是spring cl ...
- 解决Halcon转C#时,图像显示的问题
不知道大家在使用Halcon进行图像处理,由于要连续处理多张图片,转为C#代码的时候,使用了Halcon控件显示图像,但是运行的时候,中间的其他图片没有显示在控件上,之前我一直以为是运行速度快导致看不 ...
- Vue3 企业级优雅实战 - 组件库框架 - 5 组件库通用工具包
该系列已更新文章: 分享一个实用的 vite + vue3 组件库脚手架工具,提升开发效率 开箱即用 yyg-cli 脚手架:快速创建 vue3 组件库和vue3 全家桶项目 Vue3 企业级优雅实战 ...
- 2022春每日一题:Day 14
题目:字符串归类 发现字符串长度总数不大,因此把每个字符串有的字母分离,存放到桶中,再枚举合并即可,时间复杂度O(len) 赛时代码: #include <cstdio> #include ...
- KubeEdge的云边协同设计原理
1.云端组件与K8s Master的关系 cloudCore和K8s master,非侵入的映射 2.EdgeController详解 -边缘节点管理 -应用状态元数据云边协同 3.DeviceCon ...
- Python中 or、and 的优先级
上式可以看出 先看 and 输出才为 ture 因此 优先级 and>or
- Chrome 103支持使用本地字体,纯前端导出PDF优化
在前端导出PDF,解决中文乱码一直是一个头疼的问题.要解决这个问题,需要将ttf等字体文件内容注册到页面PDF生成器中.但是之前网页是没有权限直接获取客户机器字体文件,这时就需要从服务器下载字体文件或 ...
- elasticsearch 之 histogram 直方图聚合
目录 1. 简介 2. bucket_key如何计算 3. 有一组数据,如何确定是落入到那个桶中 4.需求 4.1 准备mapping 4.2 准备数据 5.histogram聚合操作 5.1.根据r ...
- java 定时开始执行程序
package com.zx.ps.web.gzdb; import java.util.Calendar; import java.util.Date; import java.util.Timer ...