10行代码实现简易版的Promise
2024-09-06 08:28:11
实现之前,我们先看看Promise的调用
const src = 'https://img-ph-mirror.nosdn.127.net/sLP6rNBbQhy0OXFNYD9XIA==/799107458981776900.jpg?imageView&thumbnail=223x125&quality=100' const promise = new Promise(function (resovle, reject) {
var img = document.createElement('img')
img.onload = function () {
resovle(img)
} img.onerror = function () {
reject()
} img.src = src
}) promise.then(function (img) {
console.log(img.width)
}, function () {
console.log('错误')
}).then(function (img) {
console.log(img.height)
document.body.appendChild(img)
})
下面我们一边分析,一边实现自己的promise。
首先Promise是一个构造方法,并且初始化的时候传入了一个函数作为参数
var MyPromise = function (doSomething) {
this.doSomething = doSomething
}
then方法很明显可以看出是Promise的实例方法,并且可以实现链式调用,说明在then方法中返回了Promise实例,即this
MyPromise.prototype.after = function (resovle, reject) {
this.doSomething(resovle, reject)
return this
}
此处的after方法相当于then方法。那么MyPromise的简易版就完成了。他的调用方法和示例的调用是一样的。
const src = 'https://img-ph-mirror.nosdn.127.net/sLP6rNBbQhy0OXFNYD9XIA==/799107458981776900.jpg?imageView&thumbnail=223x125&quality=100' const mypromise = new MyPromise(function (resovle, reject) {
var img = document.createElement('img')
img.onload = function () {
resovle(img)
} img.onerror = function () {
reject()
} img.src = src
}) mypromise.after(function (img) {
console.log(img.width)
}, function () {
console.log('错误')
}).after(function (img) {
console.log(img.height)
document.body.appendChild(img)
})
后记:相比Promise,这个实现过于简单,功能上简直不值一提。仅仅抛砖引玉。
最新文章
- 探索ASP.NET MVC5系列之~~~5.缓存篇(页面缓存+二级缓存)
- sqlite3的图片的(二进制数据)存取操作
- (转) Xcode 7 Bitcode
- xss绕过过滤之方法
- shell从函数文件里调用函数
- 无法升级数据库....因为此版本的 SQL Server 不支持该数据库的非发布版本(539) 解决方案
- Problem 2128 最长子串(kmp+strstr好题经典)
- newinstance()和new有什么区别?(转)
- 用友CDM系统“货位间商品移库单(一步)”表体增加“货位可用数量”字段,根据表头的选择的货位自动带出数值
- 支持向量机(Support Vector Machine)-----SVM之SMO算法(转)
- linux常用命令及使用技巧(一)
- consul &; registrator &; consul-template 使用
- [android] 代码注册广播接收者&;利用广播调用服务的方法
- pycharm下打开、执行并调试scrapy爬虫程序
- position和float小结
- 【Oracle】Oracle基本数据类型总结
- linux 安装 mysql-5.6.26
- 加载 bean*.xml
- CentOS7安装virtualbox
- PostgreSQL资料汇总