Promise 一些注意点
Promise是一个构造函数,其身上有all、race、resolve、reject这些方法,都可以通过 Promise. 调用。
注意点1
Promise构造函数接受一个参数 => function,其中 function接受两个参数
resolve:表示从padding => resolve 成功
reject: 表示从padding => reject 失败
其状态不可逆
注意点2
在执行 all 或者 race 方法时:
all:语法 Promise.all([p1, p2, p3, ...]).then().catch()
只有p1、p2、p3 都成功才进入then,否则进入catch。虽然进入catch但是p1、p2、p3所对应的方法都还会继续执行
也就是说:p1最先执行完,但是有错误,此时进入了all的catch。但是此时p2、p3对应的函数还会执行,并不会停止
race:语法 Promise.race([p1, p2, p3, ...]).then().catch()
和all一样,唯一不同的是:p1、p2、p3 有一个成功,就算成功,进入then
注意点3:关于return的用法(什么时候加什么时候不加)
当Promise.then(onFulfilled, onRejected) 接收两个参数,一个是状态变为resolve后的回调函数,一个是状态变为reject后的回调函数(此处只讨论onFulfilled)
1、如果onFulfilled是一个函数,且有返回值,则返回值可以继续传递给后续的then
2、如果onFulfilled是一个函数,但没有返回值(相当于return undefined),则后续then中的入参为undefined
3、如果onFulfilled不是函数,则忽略当前then,将参数直接传递给后续的then
看如下代码
在函数aa中不用return,但是在函数bb需要return。否则在下边的msg 和 p 打印结果取不到。
其原因:和上边所说一样,then 接受是一个函数,且需要返回值,所以需要return
而在函数aa中不需要return的原因是:通过new Promise(resolve, reject) 中的resolve方法返回相当于自动将返回值,挂在了promise中
而在函数bb中,通过构造函数Promise下的resolve方法是没有挂在到当前的promise中,所以当调用then的时候拿不到返回值,因此这里需要自己手动return.
另外:
1、不管是函数aa还是函数bb最外层的return是为了拿到函数返回值,和promise没有关系
2、如果在函数aa的promise中也加了return,只是为了阻止代码继续向下执行而已,和取值没有关系,如下代码,return的作用只是为了不让console.log(111) 执行
function aa () {
return new Promise((resolve, reject) => {
setTimeout(() => {
return resolve({"msg": "aa"})
console.log(111)
}, 1000);
})
}
记住一点:通过new Promise(resolve,reject)的方式,当调用then去值的话不用加return,如果通过Promise.resolve获取的话,当调用then去值的话需要加return
最新文章
- linux(centOS)下安装Oracle步骤
- 苹果手机微信上form表单提交的问题
- Installing Chocolatey
- 为 PHP 开发者准备的 12 个调试工具
- Django 后台搭建
- 我的PHP之旅--XML操作
- 数据结构(树链剖分):BZOJ 4034: [HAOI2015]T2
- nuget 命令详解
- Java Math的floor,round,ceil函数小结
- Git子模块引用外部项目
- hibernate缓存机制(二级缓存)
- VMware安装Redhat6.5
- Long转Date/页面自定义标签
- CAN报文 Intel 格式与Motorola 格式的区别
- python selenium-webdriver 等待时间(七)
- 20164319 刘蕴哲 Exp1 PC平台逆向破解
- MySql 三大知识点,索引、锁、事务,原理分析
- Yann Martell《少年 pi 的奇幻漂流》
- easyui中多级表头,主表头不能添加field字段,否则不居中
- vmp3.0.9全保护拆分解析
热门文章
- css 特殊性 权重排列
- STM32F0使用LL库实现UART接收
- ASP.NET Core Web API通过中间件或UseExceptionHandler异常处理方法
- python学习之路---基础概念扩展:变量,表达式,算法,语句,函数,模块,字符串
- CF1067E 题解
- Mysql数据库基础第二章:(八)子查询经典案例
- vue引入swiper的报错以及swiper在vue中的交互事件处理
- 【otter搭建】在Linux下搭建阿里开源otter数据同步平台
- PAT-basic-1024 科学计数法 java
- react module.scss文件中弹窗中 keyframes动画不生效,