promise用法解析
Promise的理解
- Promise是对异步操作的一种解决方案,一般情况下,如果有异步操作,就需要使用Promise对这个异步操作进行封装
- 使用Promise后可以使代码看起来更加优雅并且易于维护
使用定时器模拟一个异步请求
- Promise接收一个函数作为参数,而这个函数又接收两个参数,这两个参数分别为resolve和reject
- resolve在异步操作被成功执行时调用,而reject在异步操作执行失败时调用
- resolve和reject都是一个函数,它们都接收网络请求传过来的数据
- 对这个数据的具体操作分别放在then()和catch()中执行
new Promise((resolve, reject) => {
setTimeout(() => {
// 成功时调用resolve
resolve('你好')
//失败时调用reject
reject('error message')
}, 1000)
}).then((data) => {
console.log(data) //你好
}).catch((err) => {
console.log(err)
})
- 传入catch中的函数可以在then中同时定义
new Promise((resolve, reject) => {
setTimeout(() => {
resolve('你好')
reject('error message')
}, 1000)
}).then((data) => {
console.log(data)
}, (err) => {
console.log(err)
})
Promise的三种状态
- pending:等待状态
- 比如正在进行网络请求,或者定时器还没到时间
- fulfill:满足状态
- 当我们主动调用resolve()时,就处于该状态,此时回调then
- reject:拒绝状态
- 当我们主要调用reject()时,就处于该状态,此时回调catch
Promise的链式调用
- 同时执行多个异步操作,在then()方法内部返回
new Promise((resolve) => {resolve(res + '111')}) new Promise((resolve) => {resolve(res + '111')})可简写成Promise.resolve(res + '111')- 而
Promise.resolve(res + '111')还可以进一步简写为res + '111'
- 而
new Promise((resolve, reject) => {
setTimeout(() => {
resolve('aaa')
}, 1000)
}).then(res => {
console.log(res, '第一层的10行代码')
// return new Promise((resolve) => {resolve(res + '111')})
return res + '111'
}).then(res => {
console.log(res, '第二层的10行代码')
return Promise.reject('err message')
}).then(res => {
console.log(res, '第三层的10行代码')
}).catch(err => {
console.log(err)
})
Promise中的all方法
- 如果想同时接收到几个异步操作的数据,可以选择调用Promise的all方法,将需要执行的异步操作放入all()方法中执行
- all()方法接收一个数组,then()方法接收的也是一个数组
Promise.all([new Promise(resolve => {
setTimeout(() => {
resolve('result1')
}, 2000)
}),
new Promise(resolve => {
setTimeout(() => {
resolve('result2')
}, 1000)
})
]).then(results => {
console.log(results[0], results[1])
})
promise用法解析的更多相关文章
- Babel 配置用法解析
Babel 配置用法解析 刚复工的时候我司业务太多了,我已不记得我们连续作战了多少天,最近算是有时间可以学习学习我的babel大宝贝了,上周末看了下babel的一些核心模块以及babel的一些配置,今 ...
- extern "c"用法解析
转自: extern "c"用法解析 - 简书 引言 C++保留了一部分过程式语言的特点,因而它可以定义不属于任何类的全局变量和函数.但是,C++毕竟是一种面向对象的程序设计语言, ...
- WordPress的have_posts()和the_post()用法解析
原文地址:http://www.phpvar.com/archives/2316.html 网上找到一篇介绍WordPress的have_posts()和the_post()用法解析的文章,觉得不错! ...
- extern "C" 用法解析
extern "c"用法解析 作者 作者Jason Ding ,链接http://www.jianshu.com/p/5d2eeeb93590 引言 C++保留了一部分过程式语言的 ...
- mysql group by 用法解析(详细)
在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的 ...
- (转载)mysql group by 用法解析(详细)
(转载)http://blog.tianya.cn/blogger/post_read.asp?BlogID=4221189&PostID=47881614 mysql distinct 去重 ...
- c/c++ 多线程 等待一次性事件 std::promise用法
多线程 等待一次性事件 std::promise用法 背景:不是很明白,不知道为了解决什么业务场景,感觉std::async可以优雅的搞定一切的一次等待性事件,为什么还有个std::promise. ...
- group by 用法解析
group by 用法解析 group by语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表. SELECT子句中的列名必须为分组列或列函数.列函数对于GROUP BY子 ...
- ES6语法 promise用法
ES6语法 promise用法 function doSomething(){ return new Promise((resolve,reject)=>{ resolve('jjjj');// ...
随机推荐
- 1x1卷据层的作用
1. 尽管1x1的卷据不会捕捉空间特征(spatial features/patterns,直观点说就是2D平面图的纹理特征),但是他们能很好基于通道(channel-wise/along the d ...
- ResNet论文笔记
其实ResNet这篇论文看了很多次了,也是近几年最火的算法模型之一,一直没整理出来(其实不是要到用可能也不会整理吧,懒字头上一把刀啊,主要是是为了将resnet作为encoder嵌入到unet架构中, ...
- 如何在 ASP.Net Core 中实现 健康检查
健康检查 常用于判断一个应用程序能否对 request 请求进行响应,ASP.Net Core 2.2 中引入了 健康检查 中间件用于报告应用程序的健康状态. ASP.Net Core 中的 健康检查 ...
- PTA 递增的整数序列链表的插入
6-4 递增的整数序列链表的插入 (15 分) 本题要求实现一个函数,在递增的整数序列链表(带头结点)中插入一个新整数,并保持该序列的有序性. 函数接口定义: List Insert( List ...
- linux软件管理之yum管理操作软件包
什么是rpm 1.1`RPM` 全称 `RedHat Package Manager` 缩写,由红帽开发用于软件包的安装.升级.卸载与查询. 1.2rpm包名组成部分 `RPM` 包命名以-将软件分成 ...
- 互联网开发工具之idea项目打jar包
一.idea打jar包 步骤一:创建一个简单的java项目:如下图所示 `public class Main { public static void main(String[] args) { Sy ...
- OO第一单元感悟与体会
第一单元的三次编程作业结束了,现在分享一些我对自己作业的分析和感想 1.程序结构的分析 第一次作业: 本次作业我的主要思路是,为每一项写一个正则表达式,在输入的字符串中匹配每一项,多项式类中保存着一个 ...
- 【JVM进阶之路】十:JVM调优总结
1.调优原则 JVM调优听起来很高大上,但是要认识到,JVM调优应该是Java性能优化的最后一颗子弹. 比较认可廖雪峰老师的观点,要认识到JVM调优不是常规手段,性能问题一般第一选择是优化程序,最后的 ...
- BUAA_OS lab3 难点梳理
BUAA_OS lab3 难点梳理 实验难点 进程创建 对于初始化部分,首先需要在pmap.c中修改mips_vm_init()函数,为envs开空间,并map到UENVS空间. 其次,模仿page_ ...
- Android平台OpenGL ES/Assimp/OpenCV/GLM集成说明
Android平台OpenGL ES/Assimp/OpenCV/GLM集成说明 本文代码见: https://github.com/jiangxincode/OpenGLDemo 集成Assimp ...