Promise的实现
class Promise111{ constructor(){ this.callbacks = [] this.oncatch = null } then(onSuccess, onFail){ this.callbacks.push({ resolve: onSuccess, reject: onFail }) return this } resolve(result){ this.complete("resolve", result) } reject(result){ this.complete("reject", result) } complete(type, result){ if(type === "reject" && this.oncatch){ this.callbacks = [] this.oncatch(result) } else { let callbackObj = this.callbacks.shift() callbackObj[type](result) } } catch(onFail){ this.oncatch = onFail return this } }
测试
var p = new Promise111() function fn(){ setTimeout(function(){ p.resolve("data1") }, 1000) return p } function fn1(result){ console.log("fn1", result) setTimeout(function(){ p.resolve("data2") }, 2000) } function fn2(result){ console.log("fn2", result) } fn().then(fn1).then(fn2)
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/83687.html
摘要:要构建自适应实例,先要有自适应的实现类,实现类有两种方式一种通过配置文件,一种是通过是字节码的方式动态生成。 SPI机制 SPI,即(service provider interface)机制,有很多组件的实现,如日志、数据库访问等都是采用这样的方式,一般通用组件为了提升可扩展性,基于接口编程,将操作接口形成标准规范,但是可以开放多种扩展实现,这种做法也符合开闭设计原则,使组件具有可插...
摘要:如何实现前端路由要实现前端路由,需要解决两个核心如何改变却不引起页面刷新如何检测变化了下面分别使用和两种实现方式回答上面的两个核心问题。 原文链接:github.com/whinc/blog/… 在单页应用如此流行的今天,曾经令人惊叹的前端路由已经成为各大框架的基础标配,每个框架都提供了强大的路由功能,导致路由实现变的复杂。想要搞懂路由内部实现还是有些困难的,但是如果只想了解路由实现基本...
阅读 2899·2021-11-23 09:51
阅读 3418·2021-11-22 09:34
阅读 3317·2021-10-27 14:14
阅读 1519·2019-08-30 15:55
阅读 3352·2019-08-30 15:54
阅读 1078·2019-08-30 15:52
阅读 1896·2019-08-30 12:46
阅读 2855·2019-08-29 16:11