Promise的作用及用法
1. promise作用:
promise:解决异步回调的问题
2. 目的:
创建异步对象,当异步对象中的异步操作执行完成之后,再执行想要执行的东西。
- resolve表示将状态变成成功完成,reject表示将状态变成失败完成
- 当resolve方法执行完成之后,再执行then方法
let p = new Promise((resolve, reject) => {setTimeout(() => {console.log('执行完毕');resolve();// 表示完成}, 3000)})p.then(() => {console.log('promise异步操作完成了');})
3. Promise传参
resolve里的参数可以传给then
let p = new Promise((resolve, reject) => {setTimeout(() => {console.log("执行完毕");resolve(3)}, 1000);})p.then((d) => {console.log("接收到resolve传递的参数:", d);})
4. promise错误处理
reject中存储错误的参数,可以传给then方法中的第二个参数
let p = new Promise((resolve, reject) => {setTimeout(() => {// resolve(3) //执行成功传递的参数reject('404') //执行失败传递的参数}, 1000);})p.then((res) => {console.log("接收成功传递的参数", res); //没有resolve,不会经过这里}, (err) => {console.log('接收执行失败传递的参数:', err);})
5. promise对象的then方法 和catch方法
- Promise对象的then方法有两个参数,一个是成功后的参数,另一个是失败的参数方法
let a = 1;let promise = new Promise(function (resolve, reject) {if (a == 10) {resolve('成功')} else {reject("失败")}})// promise.then(success,fail)promise.then(res => {console.log("成功调用", res);}, err => {console.log("失败调用", err);})
- new Promise().catch() ————> 错误捕获
promise.then(res => {console.log(res); // resolve}).catch(err => {console.log(err); // 等同于接受 上面的reject返回的失败})
6.Promise的方法
- promise.resolve("成功"),将现有的东西,转成一个Promise对象,且是resolve成功状态
let p1 = Promise.resolve('123');p1.then(res => {console.log(res);})
- promise.reject('失败'),将现有的东西,转成一个promise对象,且是reject失败状态
let p2 = Promise.reject('456');p2.catch(err => {console.log(err);})
- Promise.race():与Promise.all() 的不同之处在于,它将与第一个传递的promise相同的完成方式被完成。他可以是resolves,也可以使rejects,这要取决于第一个完成的方式是两个中的哪个。
// 如果传的跌代是空的,则返回的 promise将永远等待。// 如果迭代包含一个或多个非承诺值和/或已解决/拒绝的承诺,则Promise.race将解析成为迭代中找到的第一个值。let p1 = Promise.reject('aaa')let p2 = Promise.reject('bbb')let p3 = Promise.reject('ccc')Promise.race([p1, p2, p3]).then(res => {console.log(res);}).catch(err => {console.log(err); //输出aaa})
- Promise.all() ————> 一个脚本中有多个promise时,监控多个Promise对象
// promise.all([p1,p2,p3]):把promise打包,扔到一个数组里面,打包完还是一个promise对象let p1 = new Promise((resolve, reject) => {let time = Math.random() * 4000 + 1000;setTimeout(() => {console.log('P1完成');resolve();}, time)})let p2 = new Promise((resolve, reject) => {let time = Math.random() * 4000 + 1000;setTimeout(() => {console.log('p2完成');resolve()}, time);})let p3 = new Promise((resolve, reject) => {let time = Math.random() * 4000 + 1000;setTimeout(() => {console.log('p3完成');reject()}, time);})// 必须确保所有Promise 对象都是resolve状态let p = Promise.all([p1, p2])p.then(() => {// p1 和 p2 全部执行完毕后,才会执行then方法里面的操作console.log('全部执行完成');})
7. 案例:用户登录成功后再获取用户信息
let status = 1;let userLogin = (resolve, reject) => {setTimeout(() => {if (status == 1) {resolve({data: '登陆成功',msg: 'xxxx',token: "xxsdasdfsa"})} else {reject("失败了")}}, 2000);}let getUserInfo = (resolve, reject) => {setTimeout(() => {if (status == 1) {resolve({data: "获取用户信息成功",msg: "cdcdcd",token: "sndishishdissdsmmsadf"})} else {reject('失败了')}}, 1000);}new Promise(userLogin).then(res => {console.log("用户登录成功");return new Promise(getUserInfo)}).then(res => {console.log('获取用户信息成功');console.log(res);})
Promise的作用及用法相关推荐
- PreTranslateMessage作用和用法
PreTranslateMessage作用和用法 PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数本窗体的消息都要通过这里,比較经常使用,当 ...
- java package作用_java import、package作用与用法
java import.package作用与用法 有些人写了一阵子Java,可是对於Java 的package 跟import 还是不太了解很多人以為原始码 .java 档案中的import 会让编译 ...
- MySQL数据类型中DECIMAL的作用和用法
在MySQL数据类型中,例如INT,FLOAT,DOUBLE,CHAR,DECIMAL等,它们都有各自的作用,下面我们就主要来介绍一下MySQL数据类型中的DECIMAL类型的作用和用法. 一般赋予浮 ...
- php中pre标签,html中pre标签与code标签的作用与用法
HTML 标签 定义和用法 pre 元素可定义预格式化的文本.被包围在 pre 元素中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. 标签的一个常见应用就是用来表示计算机的源代码. 可以导致 ...
- PHP中的常见魔术方法功能作用及用法实例
这篇文章主要介绍了PHP中的常见魔术方法功能作用及用法实例,本文讲解了构造函数和析构函数__construct()和__desctruct()以及属性重载(Property Overloading)_ ...
- 、简述global关键字的作用_在C#编程中global关键字的作用及其用法
在C#编程中,global 是 C# 2.0 中新增的关键字,理论上说,如果代码写得好的话,根本不需要用到它.今天就为大家展示下global关键字的作用及其用法,希望对大家学习C#编程有所帮助. 假设 ...
- chrome中Blackbox Script 黑盒脚本作用及用法
chrome中Blackbox Script 黑盒脚本作用及用法 Blackbox Script功能 每天前端人员在调试代码的时候,都可能会遇到代码调试着会进入第三方库文件,带来很多没必要的调试,不方 ...
- C#中using关键字的作用及其用法(转)
C#中using关键字的作用及其用法 using的用途和使用技巧. using关键字微软MSDN上解释总共有三种用途: 1.引用命名空间. 2.为命名空间或类型创建别名. ...
- Vue 中的 v-cloak 作用及用法
v-cloak 的作用和用法 用法: 这个指令保持在元素上直到关联实例结束编译.和 CSS 规则如 [v-cloak] { display: none } 一起用时,这个指令可以隐藏未编译的 Must ...
最新文章
- python有趣代码-盘点10个一行强大的、有趣的Python源代码
- Java黑皮书课后题第5章:**5.45(统计:计算平均值和标准方差)在商务应用中……编写一个程序,提示用户输入10个数字,然后运用下面的公式,显示这些数字的平均值以及标准方差
- Linux Centos7 以及window 10 Kali2020.4 安装 nvm node npm cnpm yarn
- 张家辉申请“渣渣辉”商标,真的很有知识产权意识了
- mysql 存储过程复杂查询_SQL分页存储过程 支持连接查询等复杂的SQL
- 深度理解依赖注入(Dependence Injection)
- RabbitMQ用户角色及权限控制
- 关于软考的一些事,你知道吗?
- 数据分析5大软件Excel、SAS、R、SPSS、Python优势分析
- mysql id 主键 外键_mysql主键 外键
- webgl1到webgl2_我如何使用WebGL重建Gorillaz Andromeda音乐视频
- 微信小程序实现下拉框功能
- 阿里云服务器申请流程
- 明明都保意外,定期寿险和意外险到底区别在哪里?
- CSS3 2D转换3D转换
- Android简易项目SQLite的简单运用——简易记事本
- 十二个“一”的大五人格分析
- trunc()用法和add_months()
- 在股权登记日或股息登记日买进的股票,能否分到红利?除权除息日卖出,还享有红利吗
- 星座夫妻(真的很准)