JS的ES6的Promise
一.Promise
1.什么是Promise对象:代表未来某个将要发生的事件,一般指的是异步操作。
2.Promise对象
存在的目的:将异步操作以同步的流程表达出来,避免层层嵌套的回调函数(俗称回调地狱)
作用:解决异步回调
3.promise对象的3个状态:
pending:初始化状态
fullfilled:成功状态
rejected:失败状态
4.使用promise对象的基本步骤:
创建promise实例对象 -------> 初始化promise对象的状态为pending
执行异步任务:开启定时器,发送ajax请求
根据异步任务执行的结果去动态的修改promise对象的状态:resolve()成功,reject()失败
promise实例对象默认有个then方法,需要两个参数,这两个参数是两个回调函数
当promise对象的状态标为成功或失败的时候会自动调用then方法中的回调函数
5.promise对象创建后直接执行:
console.log("代码开始执行");
setTimeout(() => {
console.log("执行定时器");
},);
let promise = new Promise((resolve,reject) =>{
console.log("初始化promise状态");
});
console.log(promise);
console.log("代码执行结束");

从图中可以看出,promise对象创建后直接执行而其中可以定义异步方法。
6.promise中异步方法执行
promise中的异步方法只能同时设置resolve()或reject()中的一个,不能在一处同时设置两个。
执行后调用promise对象的then方法接收返回值
成功:then的第一个方法执行
失败:then的第二个方法执行
console.log("代码开始执行");
setTimeout(() => {
console.log("执行定时器1");
}, );
let promise = new Promise((resolve, reject) => {
console.log("初始化promise状态");
setTimeout(() => {
resolve();
console.log("resolve()执行");
// reject();
// console.log("reject()执行");
}, );
});
console.log(promise);
console.log("代码执行结束");
promise
.then(()=>{
console.log("resolve()执行为成功");
},()=>{
console.log("reject()执行为失败");
});

7.promise对象的then()方法
(1)then()方法可以连续连接在一起,如果第一个异步任务执行成功后可继续执行第二个异步任务。
let num = ;
function util() {
num++;
let promise = new Promise((resolve, reject) => {
console.log("初始化promise状态");
setTimeout(() => {
resolve(`第${num}个异步方法执行成功`);
console.log("resolve(msg)执行");
// reject("第一个异步方法执行失败");
// console.log("reject(msg)执行");
}, );
});
return promise;
}
util()
.then((success) => {
console.log(success);
if (success) {
return util(); //第二个异步任务
}
}, (failure) => {
console.log(failure);
})
.then((success) =>{
console.log(success);
},(failure) =>{
console.log(failure);
});

(2)如果第一个任务执行无论成功或失败后,第一个then()方法中没有内容再继续接一个then()则默认执行成功方法。
得出结论,promise.then()方法执行后返回promise默认调用成功执行方法。
let num = ;
function util() {
num++;
let promise = new Promise((resolve, reject) => {
console.log("初始化promise状态");
setTimeout(() => {
resolve(`第${num}个异步方法执行成功`);
console.log("resolve(msg)执行");
// reject("第一个异步方法执行失败");
// console.log("reject(msg)执行");
}, );
});
return promise;
}
util()
.then((success) => {
console.log(success);
}, (failure) => {
console.log(failure);
})
.then((success) =>{
console.log(success);
console.log(`第2个异步方法执行成功`);
},(failure) =>{
console.log(failure);
});

let num = ;
function util() {
num++;
let promise = new Promise((resolve, reject) => {
console.log("初始化promise状态");
setTimeout(() => {
// resolve(`第${num}个异步方法执行成功`);
// console.log("resolve(msg)执行");
reject(`第${num}个异步方法执行失败`);
console.log("reject(msg)执行");
}, );
});
return promise;
}
util()
.then((success) => {
console.log(success);
}, (failure) => {
console.log(failure);
})
.then((success) =>{
console.log(success);
console.log(`第2个异步方法执行成功`);
},(failure) =>{
console.log(failure);
console.log(`第2个异步方法执行失败`);
});

let num = ;
function util() {
num++;
let promise = new Promise((resolve, reject) => {
console.log("初始化promise状态");
setTimeout(() => {
// resolve(`第${num}个异步方法执行成功`);
// console.log("resolve(msg)执行");
reject(`第${num}个异步方法执行失败`);
console.log("reject(msg)执行");
}, );
});
return promise;
}
util()
.then((success) => {
console.log(success);
}, (failure) => {
console.log(failure);
})
.then((success) =>{
console.log(success);
console.log(`第2个异步方法执行成功`);
},(failure) =>{
console.log(failure);
console.log(`第2个异步方法执行失败`);
})
.then((success) =>{
console.log(success);
console.log(`第3个异步方法执行成功`);
},(failure) =>{
console.log(failure);
console.log(`第3个异步方法执行失败`);
});

8.promise应用场景:在第一个异步任务成功后调用第二个异步任务执行(例如第一个定时器执行成功后调用第二个定时器执行)
执行过程分析:

JS的ES6的Promise的更多相关文章
- Node.js用ES6原生Promise对异步函数进行封装
Promise的概念 Promise 对象用于异步(asynchronous)计算..一个Promise对象代表着一个还未完成,但预期将来会完成的操作. Promise的几种状态: pending:初 ...
- 【前端开发】】ES6属性promise封装js动画
如下是我写的demo源码: 可以直接复制用浏览器打开看到效果哦: <!DOCTYPE html> <html> <head> <meta charset=&q ...
- ES6原生Promise的所有方法介绍(附一道应用场景题目)
JS的ES6已经出来很久了,作为前端工程师如果对此还不熟悉有点说不过去.不过如果要问,Promise原生的api一共有哪几个?好像真的可以难倒一票人,包括我自己也忽略了其中一个不常用的API Prom ...
- 浅谈ES6原生Promise
浅谈ES6原生Promise 转载 作者:samchowgo 链接:https://segmentfault.com/a/1190000006708151 ES6标准出炉之前,一个幽灵,回调的幽灵,游 ...
- ES6之Promise用法详解
一 前言 本文主要对ES6的Promise进行一些入门级的介绍.要想学习一个知识点,肯定是从三个方面出发,what.why.how.下面就跟着我一步步学习吧~ 二 什么是Promise 首先是what ...
- Node.js最新技术栈之Promise篇
前言 大家好,我是桑世龙,github和cnodejs上的i5ting,目前在天津创业,公司目前使用技术主要是nodejs,算所谓的MEAN(mongodb + express + angular + ...
- JS异步编程 (2) - Promise、Generator、async/await
JS异步编程 (2) - Promise.Generator.async/await 上篇文章我们讲了下JS异步编程的相关知识,比如什么是异步,为什么要使用异步编程以及在浏览器中JS如何实现异步的.最 ...
- ES6中promise总结
一.什么是ES6的Promise 讲太多也没有.直接在打印出来就好,console.dir(Promise) Promise 是一个构造函数,自身有all, reject, resolve 这几个眼熟 ...
- ES6新增"Promise"可避免回调地狱
Promise是一个构造函数,自己身上有all.reject.resolve这几个眼熟的方法,原型上有then.catch等同样很眼熟的方法. 那就new一个 var p = new Promise( ...
随机推荐
- golang学习笔记 ---interface
1. 什么是interface接口 interface 是GO语言的基础特性之一.可以理解为一种类型的规范或者约定.它跟java,C# 不太一样,不需要显示说明实现了某个接口,它没有继承或子类或“im ...
- IEDA 启动main报 stock
1 . 启动资源管理器关闭java进程,重新启动还是没有解决问题 2.看网上说jdk版本1.8换成1.7 启动成功,已解决,不知道为为什么.
- 基准测试工具:Wrk初识
最近和同事聊起常用的一些压测工具,谈到了Apache ab.阿里云的PTS.Jmeter.Locust以及wrk各自的一些优缺点和适用的场景类型. 这篇博客,简单介绍下HTTP基准测试工具wrk的基本 ...
- Java的表达式和运算符
一.算术运算符 运算符 + - * / % 说明 加 减 乘 除 取模(余数) 例子 1+2 5-3 20*5 6/4 30%9 结果 3 2 100 1 3 int x = 10; int y = ...
- Vue传递方法给页面调用
很多人在使用vue的时候苦于在vue中写方法,但是在外部甚至在另一个js该如何调用呢? 这个方法就是显示了vue的可以传递方法到页面使得页面任何地方都可以调用 前提得引用文件 这个方法一般多用于加载周 ...
- CentOS8 安装MySQL8.0
2019/11/25, CentOS 8,MySQL 8.0 摘要: CentOS 8 安装MySQL 8.0 并配置远程登录 安装MySQL8.0 使用最新的包管理器安装MySQL sudo dnf ...
- C#读写设置修改调整UVC摄像头画面-光圈
有时,我们需要在C#代码中对摄像头的光圈进行读和写,并立即生效.如何实现呢? 建立基于SharpCamera的项目 首先,请根据之前的一篇博文 点击这里 中的说明,建立基于SharpCamera的摄像 ...
- Gearman介绍、原理分析、实践改进
gearman是什么? 它是分布式的程序调用框架,可完成跨语言的相互调用,适合在后台运行工作任务.最初是2005年perl版本,2008年发布C/C++版本.目前大部分源码都是(Gearmand服务j ...
- JavaScript数据类型和语法
第一章 类型 1.2 内置类型 使用 typeof 检测对象类型并不是非常安全的行为: // 安全的 typeof undefined // 'undefined' typeof true // 'b ...
- FreeRTOS 任务通知模拟计数型信号量
举例 //释放计数型信号量任务函数 void SemapGive_task(void *pvParameters) { u8 key; while(1) { key = KEY_Scan(0); // ...