继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

10行代码实现简易版的Promise

慕标琳琳
关注TA
已关注
手记 286
粉丝 18
获赞 140

实现之前,我们先看看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. = function () {
                resovle(img)
            }

            img. = 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. = function () {
                resovle(img)
            }

            img. = 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,这个实现过于简单,功能上简直不值一提。仅仅抛砖引玉。

原文出处:https://www.cnblogs.com/linax/p/9570828.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP