经典题记录,手写 promise
什么是 promise
promise
译为承诺,在前端当中主要解决 “回调地狱” 问题:
他是一种异步编程解决方案,可以理解为一个高阶函数工厂,使用 Promise 的构造函数将输入的一个需要异步处理的函数包装一个 有多种 promise 功能的盒子(object),然后优雅地解决异步问题。
这里有个点,使用 promise 的 then 方法将多层嵌套改为链式调用,让逻辑清晰,事实上是降低了开发难度的。
一个成熟的 Promise 对象都有啥
- 首先来看一个原生 Promise 调用的例子。
1 | let p = new Promise((resolve,reject) => { |
- Promise 有三种状态:
a. pending (等待)
b. resolved (成功)
c. rejected (失败)
从 pending 开始,一经改变就不能再改,要么成功,要么失败。
- 响应处理状态的方法:
a. resolve
b. reject
这两个方法传给异步函数(executor),也就是处理我们的 ajax 请求等业务的函数。
以及 Promise 的灵魂:处理异步结束的方法:
a. then
b. finally最后还有处理错误的方法,能处理错误是系统稳定性的保证措施之一:
a. catch最后的最后是一些官方对 Promise 的定义:
a. promise规范中要求所有的infulfilled
,inrejected
都要异步执行
实现一个 Promise
为了免于冲突自己的 Promise 取名为: _Promise
;
Promise.all
1 | 41 _Promise.all = function(arr) { |
这是我实现的简易版:
1 | class _Promise { |
知识决定高度,现在高度低,多写多练。