手写Promise

发布时间 2023-08-21 10:19:08作者: 乐得逍遥
1.promise是手写异步代码的另一种方式,主要用于解决回调嵌套问题
2.promise提供两个参数resolve(成功时调用的函数),reject(失败时调用的参数),它们是promise内部实现好的函数
3.promise有三种状态,pending 等待,fulfilled成功,rejected失败
4.resolve时,将promise的状态从pending改为fulfilled
5.reject时,将promise的状态从pending改为rejected
6.promise是一个类
 
		class Promise {
			//立刻执行
			constructor(executor) {
				this.state = 'pending' // 初始化state为等待状态
				this.value = undefined  //记录成功的值
				this.reason = undefined // 记录失败的值
				// 只有状态为pending的时候才能被改变状态
				// 在new Promise的时候,可以同时调用多个函数,但是只会执行第一个
				let resolve = (value) => {
					if (this.state === 'pending') {
						this.state = 'fulfilled' // 更新状态
					}
					this.value = value ///记录成功信息
					// console.log('将状态改为成功,记录成功的信息')
				}
				let reject = (reason) => {
					if (this.state === 'pending') {
						this.state = 'rejected' // 更新状态
					}
					this.reason = reason //记录失败的信息
					// console.log('将状态改为失败,记录失败的信息')
				}
				//  如果执行executor报错,直接reject
				try {
					executor(resolve, reject)
				} catch {
					reject()
				}
			}
			then(onFulfilled, onRejected) {
				// 成功调用 onFulfilled  失败调用onRejected  根据state来进行区分
				if (this.state === 'fulfilled') {
					onFulfilled(this.value)
				}
				if (this.state === 'rejected') {
					onRejected(this.reason)
				}
			}
		}
		const p = new Promise((resolve, reject) => {
			resolve('成功的传值')
			// reject('失败的传值')
		})
		// 在类中,给原型加一个then方法
		p.then(res => {
			console.log(res)
		})