首页 > 代码库 > 自己实现ES6中的Promise API
自己实现ES6中的Promise API
Promise API是ES6的推荐标准,该API是由各JavaScript的执行引擎在底层,通常是使用C++语言实现的
为了更好地理解Promise API的使用方法并探究其可能的实现方式,笔者在JavaScript层面对Promise API进行了实现。
该实现只是作为实验、学习使用,虽然与内置的实现功能相同,但是在设计和运行效率上肯定是不能相提并论。
我也希望之后能对自己的实现进行改善。
该实现在处理异步任务时,采用了轮询的方式来检测其状态的变化。
具体代码如下(注:笔者采用Node方式进行模块定义,需要时可以通过Browserify等工具处理成浏览器可用的版本):
"use strict"; const STATUS_PENDING = ‘pending‘, STATUS_FULFILLED = ‘fulfilled‘, STATUS_REJECTED = ‘rejected‘; const POLL_INTERVAL = 200; function JSPromise(executor){ if(!executor || typeof executor != ‘function‘){ throw "No executor specified for this promise!"; } var _this = this; this.promiseStatus = STATUS_PENDING; this.resolved = false; this.promiseValue = http://www.mamicode.com/undefined;"Unexpected status: "+_this.promiseStatus); }; JSPromise.prototype.catch = function(onRejected){ if(this.resolved){ return JSPromise.resolve(); } if(!onRejected || typeof onRejected != ‘function‘){ throw "Must specify an ‘onRejected‘ callback function as the argument!"; } return this.then(undefined, onRejected); }; module.exports = JSPromise;
欢迎批评指正,相互探讨。
本实验的源码和测试代码放置于github:https://github.com/waychan23/promise-js-impl。
自己实现ES6中的Promise API
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。