ES6 Promise使用介绍
1、什么是Promise
Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。
这么说可能不够直观的理解,看下面的两个例子
// callback回调函数
function getCallback(n,callback) {
setTimeout(() => {
var num = 2*n
console.log('num',num)
callback(num) },2000)
}
getCallback(3,function callback(n) {
console.log('n',n)
}) // Promise函数的基础用法(等同于上面的回调函数)
function runPro(n){
let p = new Promise((resolve,reject) => {
setTimeout(() => {
var num = 2*n
console.log('num',num)
resolve(num)
},2000)
})
return p
}
runPro(3).then((res) => {
console.log('res',res)
})
这么看是不是觉得Promise并没有什么特别的,而且还要费劲封装,有这功夫用回调函数就好了,那么在看下面的例子
// 三层callback回调函数(传说的回调地狱)
function getCallback0(n,callback1) {
setTimeout(() => {
var num0 = 2*n
console.log('num0',num0)
callback1(num0,function callback2(params,callback3) {
let num2 = params + 1
console.log('num2',num2)
callback3(num2)
})
},2000)
} getCallback0(3,function callback1(n,callback2) {
let num1 = n+1
console.log('num1',num1)
callback2(num1,function callback3(params) {
let num3 = params + 1
console.log('num3',num3)
}
)
}) // 三层Promise(等同于上面的回调函数)
function runPro0(n){
let p = new Promise((resolve,reject) => {
setTimeout(() => {
var num0 = n*2
console.log('num0',num0)
resolve(num0)
},2000)
})
return p
}
runPro0(3)
.then((res) => {
// console.log('res',res)
let Pro1 = new Promise((resolve,reject) =>{
var num1 = res+1
console.log('num1',num1)
resolve(num1)
})
return Pro1
})
.then((res) =>{
// console.log('res',res)
let Pro2 = new Promise((resolve,reject) =>{
var num2 = res+1
console.log('num2',num2)
resolve(num2)
})
return Pro2 })
.then((res) =>{
var num3 = res+1
console.log('num3',num3)
// 如果需要可以继续回调
})
通过上面的对比可以很清除的看出,用Promise处理异步事件更加简洁直观
2、基础用法
const p = new Promise(function(resolve,reject){
if(success){
resolve('成功的结果')
}else{
reject('失败的结果')
}
})
p.then(function (res) {
// 接收resolve传来的数据,做些什么
},function (err) {
// 接收reject传来的数据,做些什么
})
p.catch(function (err) {
// 接收reject传来的数据或者捕捉到then()中的运行报错时,做些什么
})
p.finally(function(){
// 不管什么状态都执行
})
3、Promise的相关方法
Promise.prototype.then()
Promise.prototype.catch()
Promise.prototype.finally()
Promise.resolve()
Promise.reject()
Promise.all()
Promise.race()
由代码可以看出.then() .catch() .finally()都是定义在原型对象上的
4、then 的用法
由上面的基础用法代码可以看出.then()接收两个参数,第一个是resolved状态的回调函数,第二个是rejected状态的回调函数
function getNumber1(){
var p = new Promise(function(resolve, reject){
setTimeout(function(){
console.log('1')
resolve('随便什么数据1');
}, 1000);
});
return p;
}
function getNumber2(){
var p = new Promise(function(resolve, reject){
setTimeout(function(){
console.log('2')
reject('随便什么数据2');
}, 2000);
});
return p;
}
function getNumber3(){
var p = new Promise(function(resolve, reject){
setTimeout(function(){
console.log('3')
reject('随便什么数据3');
}, 3000);
});
return p;
}
Promise.all([getNumber1(),getNumber2(),getNumber3()])
.then(function(res){
console.log('res',res)
console.log('res',res[2].data)
},function (err){
console.log('err',err)
})
.catch(function(err2){
console.log('err2',err2)
})
注意:
1、Promise定义后就执行,所以通常用函数进行分装
2、Promise.all()中的参数是以一个数组传入的
ES6 Promise使用介绍的更多相关文章
- es6 Promise简单介绍
promise的基本用法 promise执行多步操作非常好用,那我们就来模仿一个多步操作的过程,那就以吃饭为例吧.要想在家吃顿饭,是要经过三个步骤的. 洗菜做饭. 坐下来吃饭. 收拾桌子洗碗. 这个过 ...
- 解析ES6 Promise
ES6 Promise 概念之类的,大概读者都应该有所知道,接下来我们直入终点. 先让我们来看看什么是Promise吧,他是一个object,类,arry,function? 首先,学习它的时候应该讲 ...
- 通过 ES6 Promise 和 jQuery Deferred 的异同学习 Promise
Deferred 和 Promise ES6 和 jQuery 都有 Deffered 和 Promise,但是略有不同.不过它们的作用可以简单的用两句话来描述 Deffered 触发 resolve ...
- ES6 Promise 接口
构造函数 new Promise(function(resolve, reject){}); 构造函数接受一个函数(executor)作为参数,该函数在返回 Promise 实例之前被调用.函数的两个 ...
- Es6 Promise 用法详解
Promise是什么?? 打印出来看看 console.dir(Promise) 这么一看就明白了,Promise是一个构造函数,自己身上有all.reject.resolve这几个眼熟的方 ...
- ES6 Promise 全面总结
转载:点击查看原文 ES6 Promise对象 ES6中,新增了Promise对象,它主要用于处理异步回调代码,让代码不至于陷入回调嵌套的死路中. @-v-@ 1. Promise本质 Promise ...
- ES6 Promise 异步操作
最近越来越喜欢与大家进行资源分享了,并且及时的同步到自己的园子内,为什么呢? 一.小插曲(气氛搞起) 在上个月末,由于领导的高度重视(haha,这个高度是有多高呢,185就好了),走进了公司骨干员工的 ...
- 微信小程序Http高级封装 es6 promise
公司突然要开放微信小程序,持续蒙蔽的我还不知道小程序是个什么玩意. 于是上网查了一下,就开始着手开发..... 首先开发客户端的东西,都有个共同点,那就是 数据请求! 看了下小程序的请求方式大概和a ...
- jquery Promise和ES6 Promise的区别
1. Deferred对象有resolve和reject方法,可以直接修改状态 jquery用Deferred实现了Promise规范,Deferred与ES6 Promise的最大区别是: Defe ...
随机推荐
- The Maze
There is a ball in a maze with empty spaces and walls. The ball can go through empty spaces by rolli ...
- (5.4)mysql高可用系列——MySQL异步复制(实践)
关键词:mysql复制,mysql异步复制,mysql传统异步复制 [1]实验环境 操作系统:CentOS linux 7.5 数据库版本:5.7.24 数据库架构:主从复制,主库用于生产,从库用于数 ...
- Oacle常用语句
1.建表语句 ) NOT NULL, region_id ) NOT NULL, salesperson_id ) NOT NULL, ) NOT NULL, ) NOT NULL, tot_orde ...
- SVN随笔记录(一)
svn是版本控制系统 为何使用svn? ~团队在开发同一个项目时对项目进行模块划分,在第一阶段结束后进行部分整合时,提交至服务器上合并. ~多人对同一版本的同一代码进行修改后,合并时会出现冲突,此是需 ...
- 高效编程之 cProfile 性能分析
写代码经常会听说一些名词,比如 性能分析.代码调优. cProfile 是 python 代码调优的一种工具,它能够统计在整个代码执行过程中,每个函数调用的次数和消耗的时间. 这个工具虽然很常用,但是 ...
- 修改公司VS_UCOS工程BUG调试过程说明
说明:公司里的工程中,使用VS_UCOS来调试应用程序.业务逻辑.方法是嵌入式和VS分别建一个工程,把底层驱动部分分别添加各自需要的源文件,头文件使用同一个.也就是嵌入式的驱动函数名和参数和VS的函数 ...
- 自定义字段的设计与实现(Java实用版)
前言 自定义字段又叫做"开放模型",用户可以根据自已的需求,添加需要的字段,实现个性化定制. 使用自定义字段的目的,使用自定义字段解决哪些问题 如现有一套CRM系统,客户模块中客户 ...
- redis 学习(5)-- 列表类型
redis 学习(5)-- 列表类型 列表特点 有序.可以重复.左右两边插入弹出 索引相关知识 索引从左往右,从0开始逐个增大 0 1 2 3 4 5 索引从右往左,从-1开始逐个减小 -6 -5 - ...
- C++ 标准库字符串类使用
标准库中的字符串类 C++语言直接支持C语言所有概念. C++中没有原生的字符串类型. 由于C++中没有原生的字符串类型,C++标准库提供了string类型. 1.string 直接支持字符串链接 2 ...
- 无法发布-旧项目发布时出现:该项目中不存在目标“GatherAllFilesToPublish”。
在项目文件夹下面找到 xxxx.csproj 文件,使用 VisualStudio Code 打开(或者任意编辑器,VisualStudio 可能无法编辑) 将以下节点进行更改 <Import ...