![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Promise
Promise学习日记
月亮慢慢圆o
小白前端工程师,自主学习中
展开
-
33.手写 Promise
【代码】33.手写 Promise。原创 2024-05-14 21:51:09 · 119 阅读 · 0 评论 -
32.await函数
如果 await 右侧的 promise 对象是失败的,就会抛出异常,需要通过 try...catch 捕获处理。await 必须写在 async 函数中,但是 async 函数中可以没有 await 函数。如果右侧是 promise 对象,await 返回的是 promise 成功的值。如果右侧是别的,直接将此值作为 await 的返回值。原创 2024-04-08 22:18:15 · 171 阅读 · 0 评论 -
31.async函数
async 也是一个函数,返回结果是一个 promise 对象,结果是由 async 函数执行的返回值决定的。如果返回值是一个promise对象,结果就是promise对象的结果,状态就是promise对象的状态。如果返回值不是一个 promise 对象,结果就是返回值,状态为成功。如果返回值是抛出错误,结果就是错误值,状态为错误。用来标志函数,形成 async 函数。原创 2024-04-08 21:57:39 · 107 阅读 · 0 评论 -
30.自定义封装Promise-class版本的实现
5.resolve 方法不太一样,它是 Promise 的方法,所以前面加上 static 进行描述,表明是一个静态成员,reject、all、race 也是如此。2.声明构造方法,把原本的 Promise 函数代码放进去。3.声明then方法,把原本的then方法的代码放进去。1.先创建 class 结构。4.catch方法也是一样。原创 2024-04-08 21:46:48 · 218 阅读 · 0 评论 -
29.自定义封装Promise-then()方法回调的异步执行
还有异步任务的情况,此时要修改Promise函数。所以还要对then()进行修改。原创 2024-04-08 21:04:12 · 164 阅读 · 0 评论 -
28.自定义封装Promise-race()方法
返回一个新的 Promise 对象,第一个完成的 promise 的结果状态就是最终的结果状态。Promise.race() 方法: (promises) => {}promises: 包含了 n 个 promise 的数组。原创 2024-04-08 20:30:48 · 123 阅读 · 0 评论 -
27.自定义封装Promise-all()方法
成功的结果是所有 promise 成功结果组成的数组,失败结果是数组当中失败的 promise 的失败结果。返回一个新的 Promise 对象,只有所有的 Promise 都成功才成功,只要有一个失败旧直接失败。如果不止一个失败,失败结果就是数组中第一个失败的 promise 的失败结果。Promise.all() 方法: (promises) => {}promises: 包含了 n 个 promise 的数组。原创 2024-04-08 20:15:46 · 190 阅读 · 0 评论 -
26.自定义封装Promise-reject()方法
如果传入一个 Promise 类型的对象,返回的 Promise 的状态还是失败,值就是传进去的 Promise。如果传入一个 非 Promise 类型的对象,则返回的结果为成功的 Promise 对象,值就是传进去的值。无论传什么参数都会返回一个失败的 Promise 对象。原创 2024-04-07 22:12:18 · 279 阅读 · 0 评论 -
25.自定义封装Promise-resolve()方法
如果传入一个 非 Promise 类型的对象,则返回的结果为成功的 Promise 对象。如果传入一个 Promise 类型的对象,则参数的结果决定了 resolve 的结果。返回一个成功/失败的 Promise 对象。原创 2024-04-07 22:02:06 · 168 阅读 · 0 评论 -
24.自定义封装Promise-catch方法异常穿透及值传递
同理第二个then,第三个then也是这样,一直到catch()去处理这个错误,也就是刚才截图控制器打印出来的错误。此时如果发现没有传 onRejected,会自动给 onRejected赋值一个函数去抛出异常,就可以实现链式异常穿透。内置的Promise是允许链式调用不传第二个回调函数也就是onRejected的,所以我们也要允许。catch() 返回结果也是一个 Promise 对象,我们可以直接去调用 then()所以我们还要对then()方法进行改进,再判断一下 onResolved函数。原创 2024-04-07 21:25:18 · 342 阅读 · 0 评论 -
23.自定义封装Promise-then方法完善
创建一个 callback 函数,然后把代码放进去,但是因为根据任务是成功还是失败的不同,所以调的函数也不同,这个不能写死。原先的修改 then 返回的代码中,代码是差不多的,所以我们可以复用。原创 2024-04-06 20:15:47 · 137 阅读 · 0 评论 -
22.自定义封装Promise-异步任务修改 then() 返回值
此时 then 方法里面走的是 if (this.PromiseState === "pending") 这个判断,等异步开始执行的时候也只是单纯的调用了 onResolved() 或者 onRejected()所以我们要对 if (this.PromiseState === "pending") 判断进行改进。会发现打印出来的 res 状态为 pending,值为 null。按照原先做的运行执行下面的异步任务。原创 2024-04-06 19:51:50 · 125 阅读 · 0 评论 -
21.自定义封装Promise-同步任务修改 then() 返回值
此时 then() 返回的就是一个 Promise 对象,但是状态是 pending, 结果是 null,所以还需要进行处理。then() 方法返回的是一个 Promise 对象,所以让 then() 方法有一个 return。then 返回的 Promise 状态由 then() 指定的回调函数执行的结果决定。如果返回的是非 promise 的任意值, 状态是 resolve,结果就是任意值。如果返回的是 promise,状态就是 promise 的结果状态。原创 2024-04-06 03:08:51 · 217 阅读 · 0 评论 -
20.自定义封装-指定多个回调任务
因为两个 p.then 都走了 PromiseState === "pending" 这个判断,第一个 p.then 把 callback 赋值了以后, 第二个 p.then 也给 callback 赋值了,就直接把 callback 给覆盖了,所以就只执行了最后一个回调。所以我们需要把这些回调都保存起来而不是只保存一个,所以 callback 改为 callbacks 变成一个数组。所以 Promise 里面执行完 resolve() 或者 reject() 以后的代码也得改变。原创 2024-04-06 02:47:20 · 172 阅读 · 0 评论 -
19.自定义封装Promise- 异步任务回调的执行
所以我们就需要在 Promise 构造函数里面的 resolve() 和 reject() 函数里面添加一个判断,判断此时是异步任务还是同步任务(也就是说此时 then() 里的 onResolved() 或者 onRejected() 函数是否调用)其实是在执行完 resolve() 或者 reject() 以后,获取了状态以后才要去执行 then()里面的 onResolved() 或者 onRejected() 函数。判断里面执行什么呢,我们要知道,我们需要在什么时候执行 then 方法。原创 2024-04-06 02:34:28 · 223 阅读 · 0 评论 -
18.自定义封装-then 方法执行回调
因为 then 方法是 Promise 执行的, p.then() 所以 then 方法里的 this 指向的是 p,我们就可以通过 this.PromiseState 状态属性来判断是调用哪一个。并且调用 then 方法的参数函数的时候,这个参数函数也是有一个参数的,这个参数就是实例对象的 PromiseResult,我们也要传过去。执行 then 方法的时候里面有两个函数参数,我们需要一个判断来确定该执行哪一个参数函数。原创 2024-04-06 01:45:26 · 250 阅读 · 0 评论 -
17.自定义封装-resolve 和 reject 代码实现
2.在定义的 resolve 中进行功能实现, 此时不能直接 this.PromiseState = 'resolved',因为这个 resolve 在调用的时候是直接调用的,this 指向 window,所以我们需要保存实例 this。然后在 catch 修改 promise 的状态为失败,调用 reject 方法将状态改为失败,抛出的错误会传给 catch(e)的 e,所以我们只需要把 e 传给 reject()就好。3.然后在定义的 resolve 函数里进行功能实现,reject 函数同理。原创 2024-04-06 01:26:53 · 232 阅读 · 0 评论 -
16.自定义封封装Promise-resolve 和 reject 结构搭建
3.执行器 (resolve, reject) =>{}有两个参数,所以 executor 也得有两个参数 executor(resolve,reject),但是这样会报错,因为 resolve 和 reject 没有声明。1.new Promise()的时候会传一个实参执行器 (resolve, reject) => {}, 我们就用形参 executor 去接收。5.我们使用 resolve 的时候有可能带参数比如 resolve('ok'), 所以我们定义的 resolve 也需要有个形参去接收。原创 2024-04-06 01:06:15 · 145 阅读 · 0 评论 -
15.自定义封装Promise-初始结构搭建
1.先定义一个 Promise 构造函数。2.在隐式原型链上添加 then 方法。原创 2024-04-06 00:54:29 · 82 阅读 · 0 评论 -
14.关键-如何中断Promise链
中断 Promise 链: 只有返回一个 pending 状态的 Promise 对象才能中断 Promise 链。原创 2024-04-06 00:28:37 · 230 阅读 · 0 评论 -
13.关键-Promise异常穿透
当使用 Promise 的 then() 链式调用的时候,可以在最后指定失败的回调,前面任何操作出现异常,都会传到最后失败的回调中处理。原创 2024-04-06 00:25:08 · 374 阅读 · 0 评论 -
12.关键-Promise串联多个操作任务
通过 then()的链式调用串联多个同步/异步任务。原创 2024-04-06 00:11:37 · 244 阅读 · 0 评论 -
11.关键-then方法返回结果由什么决定
如果返回的是 promise,状态就是 promise 的状态,结果就是promise的结果。如果返回的是非 promise 的任意值, 状态是 resolve,结果就是任意值。如果抛出异常,状态就是 rejected, reason 就是抛出的异常。由 then() 指定的回调函数执行的结果决定。原创 2024-04-06 00:07:42 · 140 阅读 · 0 评论 -
10.关键-改变状态和指定回调函数的顺序问题
当执行器函数的任务是一个同步任务,就先改变状态再指定回调。当执行器函数的任务是一个异步任务,就指定回调再先改变状态。先改变状态再指定回调的情况。先指定回调再改变状态的情况。原创 2024-04-06 00:03:42 · 171 阅读 · 0 评论 -
9.关键-能否执行多个回调
Promise 指定多个成功/失败回调函数,当 Promise 改变为对应状态的时候都会调用。原创 2024-04-05 23:59:41 · 329 阅读 · 0 评论 -
8.关键-如何改变对象的状态
调用 resolve()函数 状态由 pending => fullfilled(resolved)调用 reject()函数 状态由 pending => rejected。抛出错误 throw 状态由 pending => rejected。原创 2024-04-05 23:58:07 · 407 阅读 · 0 评论 -
7.resolve()方法,reject()方法,all()方法,race()方法
1.resolve()方法,reject()方法,all()方法,race()方法都是Promise构造函数的方法。如果传入一个 非 Promise 类型的对象,则返回的结果为成功的 Promise 对象,结果值就是参数值。如果传入一个 Promise 类型的对象,则参数的结果决定了 resolve 的结果。上文 p3 代码如果单独这么写会报错,因为有 Promise失败回调但是我们没有处理。返回一个成功/失败的 Promise 对象。我们用catch去处理错误。原创 2024-04-05 18:08:40 · 557 阅读 · 0 评论 -
6.Promise构造函数,then方法,catch方法
excutor 函数会在 Promise 内部立即同步调用,异步操作(resolve 函数,reject 函数)在执行器中执行。Promise 对象异步操作成功或者失败的回调函数,返回一个新的 Promise 对象。resolve 函数: 内部定义成功时调用的函数 value => {}reject 函数: 内部定义失败时调用的函数 reason => {}onRejected 函数: 失败的回调函数 reason => {}onRejected 函数: 失败的回调函数 reason => {}原创 2024-04-05 17:53:00 · 310 阅读 · 1 评论 -
5.Promise基本流程
【代码】5.Promise基本流程。原创 2024-04-05 17:45:38 · 123 阅读 · 1 评论 -
4.Promise对象状态属性和结果属性
1.状态 [PromiseState] 是 Promise 实例对象的一个属性,有三个值。resolved / fullfilled 成功。pending 初始化未决定的。2.状态变化只有两种可能性。rejected 失败。原创 2024-04-05 17:43:11 · 239 阅读 · 1 评论 -
3.Promise传参
【代码】3.Promise传参。原创 2024-04-05 17:38:55 · 144 阅读 · 1 评论 -
2.Promise初体验
【代码】2.Promise初体验。原创 2024-04-04 20:27:53 · 104 阅读 · 1 评论 -
1.Promise介绍
1.Promise 是 ES6 规定的语法,是 JS 中进行异步编程的新解决方案(旧方案单纯使用回调函数)2.从语法来讲:Promise 是一个构造函数3.从功能来讲:Promise 对象用来封装一个异步操作并可以获取其成功/失败的结果值。原创 2024-04-04 20:25:09 · 161 阅读 · 1 评论