# 手写实现Promise **Repository Path**: chengll000/promise ## Basic Information - **Project Name**: 手写实现Promise - **Description**: 手写实现简易版Promise - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-04-12 - **Last Updated**: 2021-08-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### Promise 一种异步的解决方案,可以解决回调地狱的问题。 ### 术语解释 1. promise:是一个拥有 then 方法的对象或函数,行为符合 promise A+ 规范 2. thenable:是一个定义了 then 方法的对象或者函数(即拥有 then 方法) 3. 值(value):执行成功的返回值,可以是任何类型 4. 异常(exception):使用 throw 抛出的异常 5. 拒因(reason):表示一个 promise 的拒绝原因 ### Promise 的三种状态 1. pending:等待态,也是 Promise 的初始状态。 2. fulfilled:执行态,执行成功后的状态,不可逆。 3. rejected:拒绝态,执行失败后的状态,不可逆。 > 注意:三种状态只能由 `pending` 转为 `fulfilled` 或者 `rejected`,并且不可逆。 ### Promise 的简单使用 ```js new Promise((resolve,reject)=>{ }).then((value)=>{ }) ``` ### Promise原理 1. 创建 promise 构造函数 ,且需要传入一个函数作为参数 2. 这个函数在初始化 promise 就会执行 3. 设置三种状态 pendding、fulfilled、rejected,且初始态为 pending 4. 设置 value,默认为 null,用来缓存 resolve 方法的返回值 5. 设置 reason,默认值为 null,用来缓存 reject 方法的返回值 6. resolve 方法:当状态为 pending 时,将 pending 转换为 fulfilled,并且给value 赋值。不可逆 7. reject 方法:当状态为 pending 时,将 pending 转换为 rejected,并且给 resaon 赋值。不可逆 8. then 方法:接受两个参数 onFulfilled 和 onRejected,都是可选参数。 若 onFulfilled 不是函数,应该被忽略(给一个默认函数) 若 onRejected 不是函数,应该被忽略(给一个默认函数)