当前位置:网站首页>Typescripts Promise
Typescripts Promise
2022-04-22 16:01:00 【Colin-YYYY】
Typescripts: Promise
作者:EER
链接:https://juejin.cn/post/6844903728399532039
来源:掘金
Promise表示一个异步操作的最终结果,与之进行交付的方式主要是then方法,该方法注册了两个回调函数,用于接收promise的终值或本promise不能执行的原因
Promises/A+(规范)
Promise一个拥有then方法的对象或函数,其行为符合Promises/A+规范;thenable一个定义了then方法的对象或函数,也可视作 “拥有then方法”值(value)指任何 JavaScript 的合法值(包括 undefined , thenable 和 promise)异常(exception)使用throw语句抛出的一个值据因(reason)表示一个 promise 的拒绝原因
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OsG2gyE7-1646576514323)(https://user-gold-cdn.xitu.io/2018/11/30/167641e2a5e8b1b4?imageView2/0/w/1280/h/960/format/webp/ignore-error/1)]
Promises的状态
一个
Promise的当前状态必须为以下三种状态中的一种:等状态(pending)、执行状态(fulfilled)、拒绝态(rejected)
- 等待态(Pending)
- 处于等待态时,promise 需满足:
可以迁移至执行态或拒绝态
- 处于等待态时,promise 需满足:
- 执行态(Fulfilled)
- 处于执行态时,promise 需满足:
不能迁移至其他任何状态,必须拥有一个不可变的终值
- 处于执行态时,promise 需满足:
- 拒绝态(Rejected)
- 处于拒绝态时,promise 需满足:
不能迁移至其他任何状态,必须拥有一个不可变的据因
- 处于拒绝态时,promise 需满足:
Then 方法
一个
promise必须提供一个then方法以访问当前值、终值和据因
promise的 then方法接受两个参数:
promise.then(onFulfilled, onRejected);
-
onFulfilled和onRejected都是可选参数。 -
如果
onFulfilled是函数,当 promise 执行结束后其必须被调用,其第一个参数为 promise 的终值,在 promise 执行结束前其不可被调用,其调用次数不可超过一次 -
如果
onRejected是函数,当 promise 被拒绝执行后其必须被调用,其第一个参数为 promise 的据因,在 promise 被拒绝执行前其不可被调用,其调用次数不可超过一次 -
onFulfilled和onRejected必须被作为函数调用即没有 this 值 ( 也就是说在 严格模式(strict) 中,函数 this 的值为 undefined ;在非严格模式中其为全局对象。) -
then 方法可以被同一个 promise 调用多次
-
then 方法必须返回一个 promise 对象
大致的过程是,promise 会从 pending 转为 fulfilled 或 rejected ,然后对应调用 then 方法参数的 onFulfilled 或 onRejected ,最终返回 promise 对象。
进一步理解,假定 有如下两个 promise:
promise2 = promise1.then(onFulfilled, onRejected);
会有以下几种情况:
- 如果
onFulfilled或者onRejected抛出异常 e ,则 promise2 必须拒绝执行,并返回拒因 e - 如果
onFulfilled不是函数 且 promise1 成功执行, promise2 必须成功执行并返回 相同的值 - 如果
onRejected不是函数 且 promise1 拒绝执行, promise2 必须拒绝执行并返回 相同的据因
Promise 实现
Promise本身是一个构造函数,即可以实现为类
[[Resolve]] 方法
一般像 [[...]] 这样的认为是内部实现,如 [[Resolve]],该方法接受两个参数:
[[Resolve]](promise, x);
复制代码
对于 x 值,有以下几种情况:
x有 then 方法 且看上去像一个Promisex为对象或函数x为Promise
声明文件
TypeScript 中声明文件用于外部模块,是 TypeScript的核心部分
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XDA307cA-1646576514324)(https://user-gold-cdn.xitu.io/2018/11/30/167641e35724b598?imageView2/0/w/1280/h/960/format/webp/ignore-error/1)]
Then 方法实现
声明文件用于外部模块,是 TypeScript的核心部分
[外链图片转存中…(img-XDA307cA-1646576514324)]
Then 方法实现
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Iv4nRg7X-1646576514324)(https://user-gold-cdn.xitu.io/2018/11/30/167641e3c6b262a8?imageView2/0/w/1280/h/960/format/webp/ignore-error/1)]
版权声明
本文为[Colin-YYYY]所创,转载请带上原文链接,感谢
https://outman.blog.csdn.net/article/details/123319027
边栏推荐
- 这个API Hub厉害了,收录了钉钉企业微信等开放Api,还能直接调试 !
- Suppose a binary tree is represented by a binary list (that is, the two pointers of the node indicate the left and right subtrees respectively). When the binary tree contains k nodes, there must be ()
- Talk about data subcontracting and related tips
- Small pit on the definition of two-dimensional or multi-dimensional array / slice in go language
- 制作的自媒体短视频很模糊?教你3个方法,让视频变清晰
- 建筑业未来的发展方向:数字化工厂管理系统
- Altium designer 生成PCB制作文件及打样流程(以嘉立创商城为例)
- 一个页面向同一个地方提交两个form表单
- Altium designer generates PCB production files and proofing process (taking jialichuang mall as an example)
- 【洛谷】P1036 [NOIP2002 普及组] 选数(DFS)
猜你喜欢

Altium designer 生成PCB制作文件及打样流程(以嘉立创商城为例)

悟空的私藏「架构』书籍推荐
![BrokenPipeError: [Errno 32] Broken pipe](/img/75/c0e2f82aa0222a3374fb6c1ffc2778.png)
BrokenPipeError: [Errno 32] Broken pipe

This API hub is powerful. It contains open APIs such as nailing enterprise wechat, and can be debugged directly!

面试官:请说说==操作符和equals(),从基本数据类型和引用数据类型两个角度谈谈

SAP UI5 数据类型(data type) 学习笔记

4.21总结

电力导线三维模型

牛客SQL刷题记录

Altium designer除了GND以外的Nets自动布线
随机推荐
396. Rotation function
343-Leetcode 反转字符串中的元音字母
Redis simple storage folder
一文学会JVM性能优化
SAP UI5 数据类型(data type) 学习笔记
Talk about data subcontracting and related tips
Greenplum【环境搭建 05】GP最新版本v6.20.3配置安装验证(内核参数+初始化参数说明)
Weekly recommended short video: how to reconstruct the core competitiveness of enterprises in the stock era?
This API hub is powerful. It contains open APIs such as nailing enterprise wechat, and can be debugged directly!
Redis operation tool class based on jedis
[binary number] same tree
Computer taskbar stuck
Abbexa丨3,5-二溴酪氨酸说明书
JUC(三)ThreadLocal
短视频平台搭建,移动端商品下单、购买过程的实现
太卷了~(2022版)大厂面经 + 详细笔记帮你搞定面试
Displays whether it is urgent
电力导线三维模型
ICMP与IPv6全局单播地址动态分配
以前用淘宝助理备份的文件内的商品,全部重新上架到淘宝店铺