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( ...
随机推荐
- 另一个角度的redis--redis 可以看做是c/s架构的软件
Redis 通信协议简单研究 redis 可以看做是c/s架构的软件,再打开一个终端输入下面的指令 https://www.cnblogs.com/nele/p/8908298.html redis ...
- 可落地的DDD(3)-如何利用DDD进行微服务的划分
摘要 前面两篇介绍了DDD的目标管理.DDD的工程结构调整.这篇讨论微服务的划分.微服务是目前后端比较流行的架构体系了,那么如何做好一个微服务的划分?一个微服务的粒度应该是多大呢?这篇主要介绍如何结合 ...
- 安装和启动docker
1.安装和启动docker yum update -y yum install -y yum-utils yum-config-manager --add-repo https://download. ...
- .NET Core程序中,如何获取和设置操作系统环境变量的值
有时候我们在.NET Core程序中需要获取和设置操作系统环境变量的值.本文演示如何使用Environment.GetEnvironmentVariable和Environment.SetEnviro ...
- 阿里云服务器连接ftp服务(软件的使用)
首先你需要有一个阿里云的ECS服务器 开通了宽带之后,ECS服务器就可以上网了 可以在本地电脑cmd控制台运行mstsc.exe启动远程桌面连接 windows+R 计算机名输入ECS服务器的公网ip ...
- 2、Vue构造器和扩展
1.VUE构造器简介 VUE构造器是一个非常重要的语法. 每个Vue.js应用都是通过构造函数Vue创建一个根实例. New了Vue对象,然后调用了这个vue对象的构造器,并向构造器传入了数据. 在实 ...
- rsyslog详解实战和避坑
目标是要把线上环境的debug日志及集中化收集起来,一方面是方便开发调试:一方面是避免直接到线上环境查看,存在安全隐患. 常用可选方案: rsyslog发送端 + rsyslog接收端: 直接存在接收 ...
- C#中字符串转换为计算公式
添加COM引用: private void button_Click(object sender, EventArgs e) { MSScriptControl.ScriptControl sc = ...
- Xcode11 Developer Tool中没了Application Loader
升级Xcode11之后不少人发现在Open Developer Tool中没了Application Loader. 那么如果我们还想用该怎么办呢? 先这样 找个老版的Xcode–>Conten ...
- uniapp之w-picker使用采坑
1. uniapp之w-picker使用采坑 1.1. 前言 由于我是先在index页面集合了这个组件,发现该文件内容实在太多了,不好维护,所以打算把内容一个个抽成组件,在抽w-picker时,遇到了 ...