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');// ...
随机推荐
- 在用free()函数释放指针内存时为何要将其指针置空
在通过free()函数释放指针内存之后讲其指针置空,这样可以避免后面的程序对与该指针非法性的判断所造成的程序崩溃问题.释放空间,指针的值并没有改变,无法直接通过指针自身来进行判断空间是否已经被释放,将 ...
- 前端生成分享海报兼容H5和小程序
### 移动端分享海报生成 最近做项目需求是生成商品分享海报,并且保存到手机中要兼容H5和小程序<br> 与后端同学沟通后,海报在前端生成最省性能和有较好的交互体验,先看做好的效果
- Bi-shoe and Phi-shoe LightOJ - 1370(数论+素数筛)
题目链接:https://vjudge.net/problem/LightOJ-1370 题意:给你N个欧拉函数值,找出每一个大于等于该欧拉函数值的数,并且要求相加和最小. 题解:因为素数i的欧拉函数 ...
- P1422小玉家的电费(JAVA语言)
package 顺序与分支; /* * 题目描述 夏天到了,各家各户的用电量都增加了许多,相应的电费也交的更多了. 小玉家今天收到了一份电费通知单.小玉看到上面写:据闽价电[2006]27号规定, 月 ...
- Shell:如何遍历包含空格的文本
Blog:博客园 个人 翻译自Looping Through a File that Contains Spaces – Bash for Loop 处理包含空格或特殊字符的文件是每个使用Linux的 ...
- (原创)高DPI适配经验系列:(一)缩放比例与DPI对应关系
一.前言 当下,2K分辨率已成为主流标配,3K.4K也已经广泛应用. 在屏幕尺寸不变的情况下,高分辨率也就意味着高DPI,对于桌面程序而言,除了先天就支持高DPI的框架外(如UWP.Electron等 ...
- kubernetes删除pod一直处于terminating状态的解决方法
kubernetes删除pod一直处理 Terminating状态 # kubectl get po -n mon NAME READY STATUS RESTARTS AGE alertmanage ...
- 用优先队列构造Huffman Tree及判断是否为最优编码的应用
前言 我们知道,要构造Huffman Tree,每次都要从堆中弹出最小的两个权重的节点,然后把这两个权重的值相加存放到新的节点中,同时让这两个节点分别成为新节点的左右儿子,再把新节点插入到堆中.假设节 ...
- 对不起,“下一代ERP”仍旧是现在的ERP
最近数字化转型太火了,到处都是相关数字化的网文.很多人又说在数字化转型时代,ERP早就落伍了云云,取而代之的是什么"下一代ERP",叫什么"ARP"." ...
- MySQL数据库高级四:工具拾遗(视图)
视图