Promise技术探究

本文详细介绍了Promise的基本概念,包括其状态转换、then方法的工作原理,并通过实例展示了如何构造和使用Promise。此外,还提供了自己实现Promise.all、Promise.race、Promise.resolve和Promise.reject的方法,帮助读者深入理解Promise的内部工作机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.promise简介

  1.1    

          Promise本意是承诺,在程序中的意思就是承诺我过一段时间后会给你一个结果。 什么时候会用到过一段时间?答案是异步操作,异步是指可能比较长时间才有结果的才做。

        Promise表示一个异步操作的最终结果。与Promise最主要的交互方法是通过将函数传入它的then方法从而获取得Promise最终的值或Promise最终最拒绝(reject)的原因。

1.2  Promise状态

一个Promise必须处在其中之一的状态:pending, fulfilled 或 rejected.

如果是pending状态,则promise:

可以转换到fulfilled或rejected状态。

如果是fulfilled状态,则promise:

不能转换成任何其它状态。

必须有一个值,且这个值不能被改变。

如果是rejected状态,则promise可以:

不能转换成任何其它状态。

必须有一个原因,且这个值不能被改变。

”值不能被改变”指的是其identity不能被改变,而不是指其成员内容不能被改变。

1.3 then 方法

一个Promise必须提供一个then方法来获取其值或原因。

Promise的then方法接受两个参数:

promise.then(onFulfilled, onRejected)

onFulfilled 和 onRejected 都是可选参数:如果onFulfilled不是一个函数,则忽略之。如果onRejected不是一个函数,则忽略之。

如果onFulfilled是一个函数:它必须在promise fulfilled后调用, 且promise的value为其第一个参数。

它不能在promise fulfilled前调用。不能被多次调用。

如果onRejected是一个函数,它必须在promise rejected后调用, 且promise的reason为其第一个参数。

它不能在promise rejected前调用。不能被多次调用。

onFulfilled 和 onRejected 只允许在 execution context 栈仅包含平台代码时运行. 

onFulfilled 和 onRejected 必须被当做函数调用 (i.e. 即函数体内的 this 为undefined). 

对于一个promise,它的then方法可以调用多次.

当promise fulfilled后,所有onFulfilled都必须按照其注册顺序执行。

当promise rejected后,所有OnRejected都必须按照其注册顺序执行。

then 必须返回一个promise 

promise2 = promise1.then(onFulfilled, onRejected);

如果onFulfilled 或 onRejected 返回了值x, 则执行Promise 解析流程[[Resolve]](promise2, x).

如果onFulfilled 或 onRejected抛出了异常e, 则promise2应当以e为reason被拒绝。

如果 onFulfilled 不是一个函数且promise1已经fulfilled,则promise2必须以promise1的值fulfilled.

如果 OnReject 不是一个函数且promise1已经rejected, 则promise2必须以相同的reason被拒绝.

2.使用promise

let promise = new Promise((resolve, reject) => {

        setTimeout(function(){

                let num =Math.random();

                  if(num<.5){

                        resolve(num);

                  }else{

                        reject('失败');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值