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用法解析的更多相关文章

  1. Babel 配置用法解析

    Babel 配置用法解析 刚复工的时候我司业务太多了,我已不记得我们连续作战了多少天,最近算是有时间可以学习学习我的babel大宝贝了,上周末看了下babel的一些核心模块以及babel的一些配置,今 ...

  2. extern "c"用法解析

    转自: extern "c"用法解析 - 简书 引言 C++保留了一部分过程式语言的特点,因而它可以定义不属于任何类的全局变量和函数.但是,C++毕竟是一种面向对象的程序设计语言, ...

  3. WordPress的have_posts()和the_post()用法解析

    原文地址:http://www.phpvar.com/archives/2316.html 网上找到一篇介绍WordPress的have_posts()和the_post()用法解析的文章,觉得不错! ...

  4. extern "C" 用法解析

    extern "c"用法解析 作者 作者Jason Ding ,链接http://www.jianshu.com/p/5d2eeeb93590 引言 C++保留了一部分过程式语言的 ...

  5. mysql group by 用法解析(详细)

    在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的 ...

  6. (转载)mysql group by 用法解析(详细)

    (转载)http://blog.tianya.cn/blogger/post_read.asp?BlogID=4221189&PostID=47881614 mysql distinct 去重 ...

  7. c/c++ 多线程 等待一次性事件 std::promise用法

    多线程 等待一次性事件 std::promise用法 背景:不是很明白,不知道为了解决什么业务场景,感觉std::async可以优雅的搞定一切的一次等待性事件,为什么还有个std::promise. ...

  8. group by 用法解析

    group by 用法解析 group by语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表. SELECT子句中的列名必须为分组列或列函数.列函数对于GROUP BY子 ...

  9. ES6语法 promise用法

    ES6语法 promise用法 function doSomething(){ return new Promise((resolve,reject)=>{ resolve('jjjj');// ...

随机推荐

  1. javascript 最权威的知识点总结

    JavaScript中如何检测一个变量是一个String类型?请写出函数实现typeof(obj) === "string"typeof obj === "string& ...

  2. python的类的实际联系--烤地瓜和搬家具

    #coding:utf-8 2 class SweetPotato(): 3 def __init__(self): 4 #先初始化对象 5 self.cook_time = 0 6 self.coo ...

  3. CPython-对象/类型系统

    Python中一切皆对象,包括实例对象和类型对象,如整数.浮点数.字符串是实例对象,整数类型.浮点数类型.字符串类型是类型对象. # [Python]>>> n=10 >> ...

  4. 教你如何用Python模拟http请求(GET,POST)

    模拟http请求有什么用呢? 我们现在使用的所有需要使用网络的:软件 应用 app 网站里面的绝大部分功能都是通过http协议来工作的 什么是http协议? http协议,超文本传输协议(HTTP,H ...

  5. [状压DP]关灯问题II

    关 灯 问 题 I I 关灯问题II 关灯问题II 题目描述 现有n盏灯,以及 m m m个按钮.每个按钮可以同时控制这 n n n盏灯--按下了第 i i i个按钮,对于所有的灯都有一个效果.按下i ...

  6. 201871030134-余宝鹏 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 1.体验软件项目开发中的两人合作,练习结对编程(Pair programming) 2.掌握GitHub协作开发程 ...

  7. H5 端 rem 适配方案与 viewport 适配

    H5 端 rem 适配方案与 viewport 适配 rem rem 是 CSS3 新增的一个相对单位(root em,根 em) 只根据当前页面 HTML 页面的 font-size 设置,如果根目 ...

  8. 数据库MySQL一

    P252 1.MySQL 最为主要使用的数据库 my sequel 不容易查找数据 DB数据库 存储数据的仓库,它保存了一系列有组织的数据 DBMS数据库管理系统,数据库是通过DBMS创建和操作的容器 ...

  9. Oracle-DG 主库将log_archive_dest_state_2远程归档线程参数设置为defer,为什么dg还是处于实时同步状态?

    一.需求,前段时间,墨天伦有个小伙伴咨询了这个问题,搞了测试环境测试下. Oracle-DG 主库将log_archive_dest_state_2远程归档线程参数设置为defer,为什么dg还是处于 ...

  10. 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之配置环境-05

    自动化kolla-ansible部署ubuntu20.04+openstack-victoria之配置环境-05 欢迎加QQ群:1026880196 进行交流学习 #全部节点执行如下操作 1. 安装常 ...