一.Promise

1.什么是Promise对象:代表未来某个将要发生的事件,一般指的是异步操作。

2.Promise对象

  • 存在的目的:将异步操作以同步的流程表达出来,避免层层嵌套的回调函数(俗称回调地狱)

  • 作用:解决异步回调

3.promise对象的3个状态:

  • pending:初始化状态

  • fullfilled:成功状态

  • rejected:失败状态

4.使用promise对象的基本步骤:

  1. 创建promise实例对象 -------> 初始化promise对象的状态为pending

  2. 执行异步任务:开启定时器,发送ajax请求

  3. 根据异步任务执行的结果去动态的修改promise对象的状态:resolve()成功,reject()失败

  4. promise实例对象默认有个then方法,需要两个参数,这两个参数是两个回调函数

  5. 当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的更多相关文章

  1. Node.js用ES6原生Promise对异步函数进行封装

    Promise的概念 Promise 对象用于异步(asynchronous)计算..一个Promise对象代表着一个还未完成,但预期将来会完成的操作. Promise的几种状态: pending:初 ...

  2. 【前端开发】】ES6属性promise封装js动画

    如下是我写的demo源码: 可以直接复制用浏览器打开看到效果哦: <!DOCTYPE html> <html> <head> <meta charset=&q ...

  3. ES6原生Promise的所有方法介绍(附一道应用场景题目)

    JS的ES6已经出来很久了,作为前端工程师如果对此还不熟悉有点说不过去.不过如果要问,Promise原生的api一共有哪几个?好像真的可以难倒一票人,包括我自己也忽略了其中一个不常用的API Prom ...

  4. 浅谈ES6原生Promise

    浅谈ES6原生Promise 转载 作者:samchowgo 链接:https://segmentfault.com/a/1190000006708151 ES6标准出炉之前,一个幽灵,回调的幽灵,游 ...

  5. ES6之Promise用法详解

    一 前言 本文主要对ES6的Promise进行一些入门级的介绍.要想学习一个知识点,肯定是从三个方面出发,what.why.how.下面就跟着我一步步学习吧~ 二 什么是Promise 首先是what ...

  6. Node.js最新技术栈之Promise篇

    前言 大家好,我是桑世龙,github和cnodejs上的i5ting,目前在天津创业,公司目前使用技术主要是nodejs,算所谓的MEAN(mongodb + express + angular + ...

  7. JS异步编程 (2) - Promise、Generator、async/await

    JS异步编程 (2) - Promise.Generator.async/await 上篇文章我们讲了下JS异步编程的相关知识,比如什么是异步,为什么要使用异步编程以及在浏览器中JS如何实现异步的.最 ...

  8. ES6中promise总结

    一.什么是ES6的Promise 讲太多也没有.直接在打印出来就好,console.dir(Promise) Promise 是一个构造函数,自身有all, reject, resolve 这几个眼熟 ...

  9. ES6新增"Promise"可避免回调地狱

    Promise是一个构造函数,自己身上有all.reject.resolve这几个眼熟的方法,原型上有then.catch等同样很眼熟的方法. 那就new一个 var p = new Promise( ...

随机推荐

  1. golang学习笔记 ---interface

    1. 什么是interface接口 interface 是GO语言的基础特性之一.可以理解为一种类型的规范或者约定.它跟java,C# 不太一样,不需要显示说明实现了某个接口,它没有继承或子类或“im ...

  2. IEDA 启动main报 stock

    1 . 启动资源管理器关闭java进程,重新启动还是没有解决问题 2.看网上说jdk版本1.8换成1.7 启动成功,已解决,不知道为为什么.

  3. 基准测试工具:Wrk初识

    最近和同事聊起常用的一些压测工具,谈到了Apache ab.阿里云的PTS.Jmeter.Locust以及wrk各自的一些优缺点和适用的场景类型. 这篇博客,简单介绍下HTTP基准测试工具wrk的基本 ...

  4. Java的表达式和运算符

    一.算术运算符 运算符 + - * / % 说明 加 减 乘 除 取模(余数) 例子 1+2 5-3 20*5 6/4 30%9 结果 3 2 100 1 3 int x = 10; int y = ...

  5. Vue传递方法给页面调用

    很多人在使用vue的时候苦于在vue中写方法,但是在外部甚至在另一个js该如何调用呢? 这个方法就是显示了vue的可以传递方法到页面使得页面任何地方都可以调用 前提得引用文件 这个方法一般多用于加载周 ...

  6. CentOS8 安装MySQL8.0

    2019/11/25, CentOS 8,MySQL 8.0 摘要: CentOS 8 安装MySQL 8.0 并配置远程登录 安装MySQL8.0 使用最新的包管理器安装MySQL sudo dnf ...

  7. C#读写设置修改调整UVC摄像头画面-光圈

    有时,我们需要在C#代码中对摄像头的光圈进行读和写,并立即生效.如何实现呢? 建立基于SharpCamera的项目 首先,请根据之前的一篇博文 点击这里 中的说明,建立基于SharpCamera的摄像 ...

  8. Gearman介绍、原理分析、实践改进

    gearman是什么? 它是分布式的程序调用框架,可完成跨语言的相互调用,适合在后台运行工作任务.最初是2005年perl版本,2008年发布C/C++版本.目前大部分源码都是(Gearmand服务j ...

  9. JavaScript数据类型和语法

    第一章 类型 1.2 内置类型 使用 typeof 检测对象类型并不是非常安全的行为: // 安全的 typeof undefined // 'undefined' typeof true // 'b ...

  10. FreeRTOS 任务通知模拟计数型信号量

    举例 //释放计数型信号量任务函数 void SemapGive_task(void *pvParameters) { u8 key; while(1) { key = KEY_Scan(0); // ...