一.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. Beego 学习笔记7:JS分页

    JS分页 1>     JS分页,业务逻辑 (1)     分页采用的是一个叫jquery.pagination.js的一个jquery插件 (2)     需要jquery的支持,此项目中使用 ...

  2. Vue学习之路由vue-router小结(九)

    一.路由: 1.后端路由: 对于普通网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源: 2.前端路由: 对于单页面应用程序来说,主要通过URL中的hash(#号)来实现不同页 ...

  3. selenium 开启开发者工具(F12)

    selenium 开启开发者工具(F12) options = webdriver.ChromeOptions(); options.add_argument("--auto-open-de ...

  4. Spring框架的AOP编程,最通俗的语言解释,易懂易学

    第七章:AOP技术 前言: AOP技术是根据动态代理设计模式进行的技术.动态代理技术分jdk动态代理和cglib动态代理 jdk动态代理特点: (1)继承java.lang.reflect.proxy ...

  5. 【JMeter】压力测试工具的概览与使用

    软件工程综合实践第五次个人作业 作业要求:在软件测试章节中,我们介绍了不少VSTS的软件测试工具,请使用一些其他平台上的测试工具,并写博客介绍如何在你的项目中具体使用. 前言:   第一次看到这个作业 ...

  6. Django 常用的 Web 应用程序工具

    Django 提供了多种开发 Web 应用程序所需的常用工具,如:缓存.日志.发送邮件.自定义认证等,更多可参考:<https://docs.djangoproject.com/zh-hans/ ...

  7. 查看Linux的本机IP

    命令式 ifconfig -a 在限制inet addr中显示本机的ip地址

  8. 【转】大众点评Cat--架构分析

    https://blog.csdn.net/szwandcj/article/details/51025669 Cat功能强大且多,光日志的报表和图表分析就有十几种,但文档却很少,寥寥无几找到一些粒度 ...

  9. php组合设计模式(composite pattern)

    过十点. <?php /* The composite pattern is about treating the hierarchy of objects as a single object ...

  10. python正则表达式(3)--match方法

    1.re.match函数 re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回None. (1)函数语法: re.match(pattern, st ...