Promise对象及它在js中的执行顺序
关于Promise对象的学习及它的执行顺序
学习阮一峰老师的ES6入门后的记录
1、promise的定义
promise是一个对象,通常包裹着一个异步操作,promise对象提供一些接口的方法,返回一些操作的状态或错误信息
promise有三种状态 pending(进行中)、resolved(已完成,也叫fulfilled)、rejected(已失败)
注意:promise中的状态只能由 pending -> resolved 和 pending -> rejected两种,且状态一旦确认不能转变
promise的基本用法
<script>
let promise = new Promise(function(resolve,reject){//resolve和reject是函数
console.log('promise创建');
resolve();
})
promise.then(function(){//相当于resolve()
// console.log(a);//error跳到.catch
console.log('promise的执行完成了');
})
.catch(function(){//相当于reject()
console.log('promise的执行失败了');
})
</script>
2、promise的一些方法
.then(fn1,fn2)
.then()方法中的参数,fn1是resolved状态的回调函数,fn2(可选)是rejected状态的回调函数,一般只用fn1来作为promise成功的处理函数
注意:.then()返回的是一个新的promise实例,.then(fn1)fn1中的返回的数据作为新promise的参数
.catch(fn)
.then(null/undefined,function(){})的别名,是发生错误是的回调函数
注意:在promise执行顺序中当.then()的成功处理函数执行,导致不会执行.catch()中的函数,反之一样
.finally(function(){})
不论是执行.then()还是执行.catch(),finally都会执行
代码示例:
<script>
let promise = new Promise(function(resolve,reject){
let i = 1;
resolve(i);//调用.then()中的方法
i++;
reject(i);//调用.catch()中的方法,不能与.then()一起执行
})
promise
.then(function(num){
console.log(num);
})
.catch(function(num){
console.log(num);
})
.finally(function(){//不论执行.then还是.catch,finally都会执行
console.log('finally');
})
</script>
3、promise中的执行顺序
js执行是单线程的,所以浏览器执行会把js事件,划分为当前执行,和等待执行的栈
等待执行中的栈一般为异步事件,其中也分为宏任务和微任务之分,一般是执行一个宏任务后,执行微任务栈里的所有微任务,在接着执行下一个宏任务,在执行任务途中会将对应的宏任务和微任务依次添加到对应的栈中(也就是说在下一个宏任务执行之前,微任务的等待栈是空的)
promise对象.then,.catch为微任务
代码示例:
<script>
setTimeout(function(){
console.log('setTimeout执行了');//宏任务
})
let promise = new Promise(function(resolve,reject){
console.log('promise执行了');//主进程
resolve();//or reject();
})
promise
.then(function(){
console.log('.then执行了');//微任务
})
.catch(function(){
console.log('.catch执行了');//微任务
})
.finally(function(){
console.log('finally执行了');//微任务
})
</script>
上面代码的执行顺序是:

Promise对象及它在js中的执行顺序的更多相关文章
- JS中函数执行顺序的问题?
作者:知乎用户链接:https://www.zhihu.com/question/23564807/answer/82996422来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...
- js中的执行环境及作用域
最近在面试时被问到了对作用域链的理解,感觉当时回答的不是很好,今天就来说说js中的作用域链吧. 首先来说说js中的执行环境,所谓执行环境(有时也称环境)它是JavaScript中最为重要的一个概念.执 ...
- 进阶学习js中的执行上下文
在js中的执行上下文,菜鸟入门基础 这篇文章中我们简单的讲解了js中的上下文,今天我们就更进一步的讲解js中的执行上下文. 1.当遇到变量名和函数名相同的问题. var a = 10; functio ...
- php课程 1-3 web项目中php、html、js代码的执行顺序是怎样的(详解)
php课程 1-3 web项目中php.html.js代码的执行顺序是怎样的(详解) 一.总结 一句话总结:b/s结构 总是先执行服务器端的先.js是客户端脚本 ,是最后执行的.所以肯定是php先执行 ...
- Java 基础:继承中的执行顺序
1.单独的父类测试 Java中,new一个类的对象,类里面的静态代码块.非静态代码.无参构造方法.有参构造方法.类的一般方法等部分, 它们的执行顺序相对来说比较简单,用程序也很容易验证. 比如新建一个 ...
- JavaScript在页面中的执行顺序(理解声明式函数与赋值式函数) 转载
JavaScript在页面中的执行顺序 https://blog.csdn.net/superhoy/article/details/52946277 2016年10月27日 15:38:52 阅读数 ...
- Unity脚本在层级面板中的执行顺序测试3
断断续续的写了3篇,以后有时间可以做成一个系列了 前面2篇测试了GameObject的顺序,以及Awake和OnEnable的时机: Unity脚本在层级面板中的执行顺序测试1 http://www. ...
- Unity脚本在层级面板中的执行顺序测试4-附加整理
测试4为一些附加内容,后续的各种tips都加在此. 前几篇测试的链接: Unity脚本在层级面板中的执行顺序测试1 http://www.cnblogs.com/hont/p/4298110.html ...
- 【分析】浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别(SamWang)
[分析]浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别(SamWang) 今天无意中看到有关Invoke和BeginInvoke的一些资料,不太清楚它们之间 ...
随机推荐
- drf 框架
一. drf简介 drf框架,全程: django-rest framework , rest是插件名字,django插件的名字叫rest,framework是框架的意思 二. 接口 在平时生活 ...
- 04-12 scikit-learn库之随机森林
目录 scikit-learn库之随机森林 一.RandomForestClassifier 1.1 使用场景 1.2 代码 1.3 参数 1.4 属性 1.5 方法 二.RandomForestRe ...
- atomic_inc(&v)原子操作简述
atomic_inc(&v)对变量v用锁定总线的单指令进行不可分解的"原子"级增量操作,避免v的值由于中断或多处理器同时操作造成不确定状态. 原子操作 所谓原子操作,就是该 ...
- redis之spring应用
前言 读本文之前,需要大家对redis有所了解,大家可以去看一下我之前分享的redis安装及简单使用这一随笔,而本文我将跟大家分享学习一下redis与spring的集成.当然,首先需要打开我们的red ...
- Huffman树及其编解码
Huffman树--编解码 介绍: Huffman树可以根据输入的字符串中某个字符出现的次数来给某个字符设定一个权值,然后可以根据权值的大小给一个给定的字符串编码,或者对一串编码进行解码,可以用于 ...
- Java工程师学习指南(完结篇)
Java工程师学习指南 完结篇 先声明一点,文章里面不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦. 因为笔者还只是一名在校 ...
- linux服务器搭建--将win10换成linux
在这里说记录一下自己装linux的步骤,如果也有需要的朋友可以参看下: 1.目前win10的系统装成inux系统有3个解决办法: 第一:win10装linux子系统,网上已经有很多教程,步骤很简单 第 ...
- 代码审计-(Ear Music).任意文件下载漏洞
0x01 代码分析 后台地址:192.168.5.176/admin.php admin admin 安装后的界面 在后台发布了一首新歌后,前台点进去到一个“下载LRC歌词”功能点的时候发现是使用re ...
- MySQL 拿 WebShell
两种常规方法利用 MySQL getshell 的方法: select … into outfile general_log 一.select … into outfile 介绍 利用需要满足以下条件 ...
- Windows 7 SP1官方原版ISO系统镜像所有版本下载集合
========================================================================== Windows 7 With SP1 32位简体中 ...