您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

Promise 的相关概念 与API 详情解释

时间:2019-10-14 13:24:01  来源:  作者:

Promise: 许诺

用来创建promise对象的构造函数: function Promise (excutor) {}
简洁描述: 一个promise对象用来表示一个异步操作的最终状态(完成或失败),以及该异步操作的结果值
详细描述: Promise 对象是一个代理对象(代理一个值),被代理的值在Promise对象创建时是未知的。
 它允许你为异步操作的成功和失败分别绑定相应的处理回调函数
 这让异步方法可以像同步方法那样返回值,但并不是立即返回最终执行结果,而是一个能代表未来出现的结果的promise对象
promise对象的3种状态值
 pending(未决定的): 初始状态,既不是成功,也不是失败状态。
 resolved/fulfilled(完成的): 意味着操作成功完成。 
 rejected(拒绝的): 意味着操作失败。
promise对象的状态变化(2种)
 pending ==> resolved: 调用resolve()
 pending ==> rejected: 调用reject()
 注意: promise的状态确定后就不可再转换为其它状态
promise对象内部隐藏的属性
 [[PromiseStatus]]: 内部变量, 存储promise对象当前的状态值
 [[PromiseValue]]: 内部变量, 存储成功后的value或失败后的reason

2). excutor: 执行器

executor是带有 resolve 和 reject 两个参数的函数: (resolve, reject) => {}
由我们定义, 在new Promise()内部会立即同步调用 executor 函数(不是我们调用的)
异步操作的代码应该在此函数中执行, 一般成功后调用resolve(), 失败后调用reject()

3). resolve: 解决

由Promise函数内部定义, 但由我们调用的函数
当异步任务成功时, 我们应该调用resolve函数, 并传入需要的value
resolve函数内部: 
 同步修改promise对象的状态为resolved和保存成功value, 
 异步执行已经存储的所有onFulfilled回调函数

4). reject: 拒绝

由Promise函数内部定义, 但由我们调用的函数
当异步任务失败/抛出error时, 我们应该调用reject函数, 并传入需要的reason
reject函数内部: 
 同步修改promise对象的状态为rejected和保存失败reason
 异步调用已经存储的所有onRejected回调函数

5). then: 接着

promise对象的方法: then(onRsolved函数, onRejected函数), 返回值为一个新的promise对象
作用: 用来指定promise的状态为resolved或rejected时的回调函数
注意: 
 then()方法的返回值为新的promise对象, 这样可以进行.then()的链式调用
 返回的promise的结果状态和值由回调函数的结果决定

6). onResolved: 当已解决时

由then()的第一个参数指定的回调函数: (value) => {}
当promise的状态为resolved时自动异步调用
onResolved函数的返回值:
 新的promise对象
 其它或不返回

 

7). onRejected: 当已拒绝时

由then()的第二个参数或catch()指定的回调函数: (reason) => {}
当promise的状态为rejected时自动异步调用
onRejected函数的返回值:
 新的promise对象
 其它或不返回

8). catch: 捕获

promise对象的方法: catch(onRejected函数)
是then()的语法糖方法, 相当于: then(null, onRejected函数)

9). Promise.resolve()

手动创建一个已经resolve的promise的快捷方法: Promise.resolve(value/promise)
如果参数为promise: 读取此promise结果值作为返回promise的结果值

10). Promise.reject() 用得很少

手动创建一个已经reject的promise的快捷方法: Promise.reject(reason)

 

11). Promise.all([p1, p2, p3])

用来实现批量执行多个promise的异步操作, 返回一个新的promise: Promise.all([promise1, promise2, ...])
只有当所有异步操作都resolved后, 返回的promise才会变为resolved状态, 只要有一个变为rejected, 返回的promise直接变为rejected
面试题: 实现一次发多个请求, 只有都成功后才去做处理?


Tags:Promise   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
一般在开发中,查询网络 API 操作时往往是比较耗时的,这意味着可能需要一段时间的等待才能获得响应。因此,为了避免程序在请求时无响应的情况,异步编程就成为了开发人员的一项基...【详细内容】
2021-03-31  Tags: Promise  点击:(260)  评论:(0)  加入收藏
这篇文章算是 JavaScript Promises 比较全面的教程,该文介绍了必要的方法,例如 then,catch和finally。此外,还包括处理更复杂的情况,例如与Promise.all并行执行Promise,通过Promis...【详细内容】
2020-09-09  Tags: Promise  点击:(76)  评论:(0)  加入收藏
Promise 是 CommonJS 中的规范,它能够帮助我们控制代码流程,避免函数的多层嵌套。现在 Web 前端异步编程越来越普遍,它的出现让异步编程变得更佳的容易理解。由于它越来越受到...【详细内容】
2019-11-11  Tags: Promise  点击:(88)  评论:(0)  加入收藏
Promise: 许诺用来创建promise对象的构造函数: function Promise (excutor) {}简洁描述: 一个promise对象用来表示一个异步操作的最终状态(完成或失败),以及该异步操作的结果值...【详细内容】
2019-10-14  Tags: Promise  点击:(119)  评论:(0)  加入收藏
兼容性promise兼容性一、Promise 的状态Promise有3种状态: Pending:进行中 Resolved(Fulfilled):已完成 Rejected:已失败Promise状态的改变只有两种: Pending --> Resolved Pendi...【详细内容】
2019-08-02  Tags: Promise  点击:(294)  评论:(0)  加入收藏
▌简易百科推荐
本文分为三个等级自顶向下地分析了glibc中内存分配与回收的过程。本文不过度关注细节,因此只是分别从arena层次、bin层次、chunk层次进行图解,而不涉及有关指针的具体操作。前...【详细内容】
2021-12-28  linux技术栈    Tags:glibc   点击:(3)  评论:(0)  加入收藏
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(2)  评论:(0)  加入收藏
程序是如何被执行的  程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(10)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(20)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(25)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(25)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条