当前位置: 首页 > 编程日记 > 正文

Promise和Promise的方法

(Promise和Promise的方法)

Promise是ES6一个伟大的发明,他使我们从回调地狱中能够走出来。

什么是Promise

从字面上来看,Promise就是一个承诺。那么,在ES6当中,Promise通常用来控制异步操作。当一个异步操作成功的时候,触发.then的操作。当一个异步操作不成功的时候,触发.catch操作。那么,我们来写下一个Promise的操作吧。

const loadData = new Promise((resolve, reject) => {
setTimeout(() => {rseolve({data: "loding Done!"})
}, 2000)
})
loadData.then(data => {
console.log(data.data);
})
复制代码

上例就是一个典型的Promise例子。 当我们去执行一个数据库的读取操作的时候,我们通常都是耗费时间的。是一个异步操作。那么,我们用setTimout去模拟读取数据的时间。当这个数据读取完成之后,再去通知下面的代码对应去执行相应的动作。这里,我们利用resolve发出一个完成的信号。下面的代码利用一个.then去接收到这个完成的信号同时执行相应的完成操作。

当然,如果异步操作失败了,我们可以通过reject去发出一个操作失败的信号,在.catch当中去捕捉并处理这个信号。

const loadData = new Promise((resolve, reject) => {setTimeout(() => {reject("Timeout!")}, 3000)
})
复制代码

loadData.catch(err => { console.log(err) }) 处理多个Promise 在ES6当中,共有两种处理多个Promise的方法。

Promise.all(); Promise.race(); Promise.all 例如,当我们去读取页面的主体内容和页面的标题内容時,两个异步请求互不相关。那么,我们就可以同时去发起ajax请求。

const loadMain = new Promise((resolve, reject) => {setTimeout(() => {resolve({data: {title: "主体标题",desc: "主体内容"}})}, 2000)})const loadSide = new Promise((resolve, reject) => {
setTimeout(() => {resolve({data: {list: ["主页","新闻列表","关于"]}})
}, 500)
})Promise.all([loadMain, loadSide]).then(res => {console.log(res)}).catch(err => {console.log(err)})
复制代码

注意点:

当我们使用all方法发起请求的时候,只有所有的Promise成功后,才会执行.then方法。 任何一个错误,都会导致执行.catch方法。 Promise.race() race方法也是用于处理多个Promise请求的,不同于all方法的是,race方法接收最快收到的Promise请求,无论是成功还是失败,都以最快的为准。

转载于:https://juejin.im/post/5c6ea07f51882562ee645eca

相关文章:

镜头评价指标及测试方法(三)--------测量原理及3D相机调查

1.测量原理: 1.1、通过红外结构光(Structured Light)来测量像素距离,如Kinect1、Project Tango1、Intel Realsense等; 通过近红外激光器,将具有一定结构特征的光(比如离散光斑、条纹光、编码结构光等)投射到…

Android--Retrofit的简单使用(一)

1,如果不太了解retrofit的同学可以先去官网学习一下简单使用:http://square.github.io/retrofit/,这里我们以一个简单的Get请求的例子来练习一下 2,https://api.douban.com/v2/movie/top250?start0&count10 目标地址&#xf…

【Codeforces】920A Water The Garden(浇花)

http://codeforces.com/problemset/problem/920/A 给你花坛的数目,花坛都是连续的,某一些花坛里有水龙头,给出了这些有水龙头的位置 The garden from test 1. White colour denotes a garden bed without a tap, red colour — a garden be…

Work with Alexa :Echo匹配连接到Alexa

背景: 通过蓝牙可以让你的智能家居设备和Echo设备连接起来,从而达到Echo通过语音控制智能家居设备。 什么事Alexa Gadgets? 我的理解Alexa Gadgets是智能家居设备的一部分,包含硬件和软件。硬件:蓝牙模块;软…

Maven 学习Tips

2019独角兽企业重金招聘Python工程师标准>>> 使用 deploy 应该注意的地方 在项目的pom文件中增加如下节点&#xff1a;<project><distributionManagement><repository><id>releases</id><url>http://192.168.1.99:8081/nexus/c…

【Codeforces】1015B Obtaining the String(字符串 交换)

http://codeforces.com/contest/1015/problem/B n 表示 字符串的长度 然后是两个字符串&#xff0c;每一次只能交换相邻的两个&#xff0c;如果选择第i个字符的话&#xff0c;只能交换第i个和第i1个 然后输出每一次交换选定的位置 暴力&#xff0c;模拟&#xff0c;queue&am…

07 分支管理 —— Feature分支

2019独角兽企业重金招聘Python工程师标准>>> 07 分支管理 —— Feature分支 软件开发中&#xff0c;总有无穷无尽的新的功能要不断添加进来。添加一个新功能时&#xff0c;你肯定不希望因为一些实验性质的代码&#xff0c;把主分支搞乱了&#xff0c;所以&#xff0…

适用于0基础小伙伴的HTML知识点总结 先到先得哟

HTML基础知识点分享 前段时间一直忙于私下学习消化一些PHP中的知识体系&#xff0c;导致博客开通至今一直没发表相关技能贴。最近呢~博主夏天我正在进行前半段知识体系和框架的总结阶段。借此&#xff0c;抽空给大家分享一下私下自己学习时的一些心得体会以及知识体系&#xff…

SLAM小结——求解退化问题解析(F、H、E)(面试经验总结)

总结&#xff1a; 1 Essential Matrix E t ^ R 为3*3的矩阵&#xff0c;奇异值为 [ u, u, 0] ^ T 的形式。为本质矩阵的内在性质。 性质&#xff1a;理论上综合旋转、平移共有6个自由度&#xff0c;因尺度等价&#xff0c;E有5个自由度。 求解&#xff1a;一般使用…

【Codeforces】1065B Vasya and Isolated Vertices (无向图的)

http://codeforces.com/problemset/problem/1065/B 一个图&#xff0c;给定顶点数&#xff0c;边数&#xff0c;求解最小孤立点数和最大孤立点数 最小的话&#xff0c;一个边连接两个顶点成为一个整体&#xff0c;如果最后有多余的点&#xff0c;那些就是孤立的点 最大就是找…

这些资源网站为什么能获得5万知乎大佬推荐,而我错失了什么吗?

现在很多朋友可能只要是一听到资源网站&#xff0c;想必就会好奇是什么网站&#xff0c;用用看是不是由说的那么厉害&#xff01;其实资源网站给我们的诱惑是在是太大了&#xff0c;其主要原因是可以帮助我们搜索到很多意想不到的资源&#xff01; 为了回应大家的需求&#xff…

大话Redis进阶

2019独角兽企业重金招聘Python工程师标准>>> 使用Redis过程中&#xff0c;总是会遇到各种各样问题&#xff0c;这里进行问题的总结&#xff0c;作为Redis 进阶的经验分享。 更新缓存的问题 [主动]需要操作人员去操作&#xff0c;或者定时调度[被动]由用户触发更新[预…

SLAM精度测评——EVO

1.install GitHub - MichaelGrupp/evo: Python package for the evaluation of odometry and SLAM 注意&#xff1a;安装好依赖&#xff01; sudo apt install python-pip pip install evo --upgrade --no-binary evo or pip install evo --upgrade --no-binary evo --user…

【UVA】10152 ShellSort (几只乌龟的故事)

https://vjudge.net/problem/UVA-10152 题目大意&#xff1a; 输入N&#xff0c;给你N个乌龟的名字&#xff0c;下面N行是初始状态&#xff0c;在下面N行是最终状态&#xff0c;你选中这只乌龟以后&#xff0c;只能把它移动到最上面&#xff0c;问怎么样操作步数最少&#xf…

python2与python3转换记录

为什么需要有两个版本的Python Python2和Python3不兼容是每个接触过Python的开发者都知道的事&#xff0c;虽说Python3是未来&#xff0c;但是仍然有很多项目采用Python2开发。Linux的许多发行版本(如Ubuntu)都会自带Python2.7&#xff0c;但是当我们准备开发一个Python3项目的…

oracle读书笔记之Oracle 11g R2 DBA操作指南(前三章)

Oracle 11g R2 DBA操作指南是我学习的第一本讲述oracle数据库知识的书籍&#xff0c;在此记录下自己的学习笔记&#xff0c;对于书中的知识点本人通过实际操作进行验证。1.Oracle数据库基础1.1.关系数据库1.1.1.关系数据库模型1.关系数据库模型三个核心概念&#xff1a;关系、属…

【UVA】11991 Easy Problem from Rujia Liu? (整数v第k次出现在什么位置)

https://vjudge.net/problem/UVA-11991 题目大意&#xff1a;就是给你一个序列&#xff0c;然后给出k和v&#xff0c;看整数v第k次出现在该序列的什么位置&#xff0c;没有的话就输出0 结构体&#xff08;略复杂&#xff09;&#xff1a; #include <iostream> #include…

面试题:2018最全Redis面试题整理

1、什么是Redis?Redis 是完全开源免费的&#xff0c;遵守BSD协议&#xff0c;是一个高性能的key-value数据库。 Redis 与其他 key - value 缓存产品有以下三个特点&#xff1a;Redis支持数据的持久化&#xff0c;可以将内存中的数据保存在磁盘中&#xff0c;重启的时候可以再次…

Android5.0如何正确启用isLoggable(二) 理分析

转自&#xff1a;http://www.it165.net/pro/html/201506/43374.html 概要 在上文《Android 5.0 如何正确启用isLoggable(一)__使用详解》中分析了isLoggable的使用方法&#xff0c;本文主要分析isLoggable实现原理以及user版系统root后永久enable isLoggable的原理&#xff0c;…

SLAM精度测评——rpg_trajectory_evaluatio

1. install https://github.com/ccxslam/rpg_trajectory_evaluation#install 下载catkin_simple&#xff1a;https://github.com/catkin/catkin_simple 建立工作空间 src下载&#xff0c;编译&#xff0c;然后下载rpg_trajectory_evaluatio,编译安装即可。 &#xff12;&a…

STL set multiset

STL容器大的方向分为两类&#xff0c;序列式容器和关联式容器。 这两者通过数据在容器内的排列来区分。关联容器和顺序容器的根本不同在于&#xff1a;关联容器中的元素是按关键字来保存和访问的&#xff0c;而顺序容器中的元素则是按它们在容器中的位置来顺序保存和访问的。 …

Windows 消息循环(1) - 概览

本文从消息循环是如何驱动程序的这个角度&#xff0c;对 Windows 消息循环进行概览性介绍。 使用 EN5 课件获得更好的阅读体验&#xff1a; 【希沃白板5】课件分享 : 《Windows培训 - 消息循环》https://r302.cc/q2d1jB 点击链接直接预览课件 1 程序是怎么跑起来的&#xff1f;…

得到的旋转向量和平移向量转换成旋转矩阵 (SE(3))

理论过程 头文件说明 1.使用罗德里格斯公式需要包含头文件为#include<opencv2/calib3d.hpp> 2.使用函数cv2eigen需要包含头文件<opencv2/core/eigen.hpp>&#xff0c;但是在则之前要包含一个对eigen定义的头文件&#xff0c;否则会报eigen.hpp文件的错&#xff0c;…

[译稿]同步复制提议 2010-09

2019独角兽企业重金招聘Python工程师标准>>> 同步复制9/2010议案 目录 [隐藏] 1 PAGE状态 2 有何不同之处这个补丁&#xff1f; 3 同步复制概述 4 用户视角 4.1 管理员视角 5 实现 5.1 STANDBY 5.2 MASTER 6 CODE 7 性能分析 8 尚未实现 9 &#xff0c;其他问题 PAG…

STL vector

1、vector是表示可变大小数组的序列容器。 2、就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问&#xff0c;和数组一样高效。但是又不像数组&#xff0c;它的大小是可以动态改变的&#xff0c;而且它的大小会…

JavaScript 复习之数据类型

一、简介 JavaScript 的数据类型有 7 种&#xff1a; 数值&#xff08;number&#xff09;字符串&#xff08;string&#xff09;布尔值&#xff08;boolean&#xff09;undefinednull对象&#xff08;object&#xff09;Symbol&#xff08;ES6 中新增的类型&#xff0c;表示独…

Nginx反代配置

一、ngx_http_proxy_module模块ngx_http_proxy_module模块可根据用户请求的uri传递至后端服务器&#xff0c;实现反向代理命令&#xff1a;1.proxy_pass设置一个代理服务器的地址&#xff0c;协议&#xff0c;和一个可选的URI的位置应该映射。作为一个协议&#xff0c;“HTTP”…

STL queue priority_queue

queue 队列 queue 队列 就像排队一样&#xff0c;后来的排在后面&#xff0c;先来的先出队。所以只能对队首和队尾的元素进行操作 back()返回最后一个元素empty()如果队列空则返回真front()返回第一个元素pop()删除第一个元素push()在末尾加入一个元素size()返回队列中元素的…

镜头评价指标及测试方法(二)—畸变与分辨率

一、畸变 畸变&#xff08;distortion&#xff09;也称为失真&#xff0c;是由于光阑球差的影响&#xff0c;不同视场的主光线通过光学系统后与高斯像面的交点高度不等于理想像高&#xff0c;两者之差就是畸变。因此畸变只改变轴外物点在理想面上的成像位置&#xff0c;使像的形…

优秀Java程序员应该知道的20个实用开源库

一个优秀且经验丰富的Java开发人员的特点之一是对API的广泛了解&#xff0c;包括JDK和第三方库。我花了很多时间学习API&#xff0c;特别是在阅读Effective Java 3rd Edition之后&#xff0c;Joshua Bloch建议如何使用现有的API进行开发&#xff0c;而不是为常用的东西写新的代…