面试题:promise的链式怎么实现的
写文章为了让自己好记住知识点,也为了后续当作笔记来看待
前言
之前有过一次面试,面试官问 promise 相关的知识点,然后我回答了,他追问说 promise 的链式怎么实现?我当时没反应过来。面试官很有耐心,说 jquery 也是有链式的,你看过 jquery 的源码吗?它的链式怎么写的?我还是不知道,后来没通过面试,这个知识点常被我回忆,现在正好有时间,来写一写
正文
答案是:返回this
先来一个例子:
1 | var person = { |
命名一个对象,它有两个方法,sayName 和 sayAge ,如果我想这样表示 person.sayName().sayAge()
呢?怎么做,在方法 sayName 和 sayAge 中返回 this,即
1 | var person = { |
这就是表示,调用方法 sayName 、sayAge 后,返回调用者,即例子 person.sayName()
,person 调用 sayName,调用完后返回值还是 person。所以它可以继续链式调用 sayAge,因为它表示的还是 person
Promise 中的链式
Promise 本身没有链式,但是 Promise 的实例对象中的 then 有链式
1 | function MyPromise(executor) { |
当你使用 Promise 时,一般是这样使用:
1 | let promise = new Promise((resolve, reject) => { |
如果加上链式
1 | promise.then(() => { |
所以很明显,每调用一次 then,就是返回一个实例对象(return new Promise
)
Jquery 中的链式
源码太多内容,就拿 core.js
中的代码为例子
1 | jQuery.fn = jQuery.prototype = { |
我们不用看全部,但看其中的方法,是不是和最开始的例子很像——return this
所以链式不可怕,可怕的是,动都不动就自我劝退