promise setTimeout setInterval 执行顺序
promise 马上执行,setTimeout会放到任务队列,最后执行setInterval
2 3 5 4 1 6
setInterval(()=>{
if (!flag){
console.log(6)
flag=true
}
},1000)
setTimeout(function () {
console.log(1)
}, 0);
new Promise(function executor(resolve) {
console.log(2);
for (var i = 0; i < 10000; i++) {
i == 9999 && resolve();
}
console.log(3);
}).then(function () {
console.log(4);
});
console.log(5);
多个任务(promise 有 3 种状态:pending(进行中)、fulfilled(已完成,又称为Resolved) 或 rejected(已失败))
使用promise.all() Promise.all方法用于将多个Promise实例,包装成一个新的Promise实例。
Promise.all方法接受一个数组作为参数,数组里的元素都是Promise对象的实例,如果不是,就会先调用下面讲到的Promise.resolve方法,将参数转为Promise实例,再进一步处理。(Promise.all方法的参数可以不是数组,但必须具有Iterator接口,且返回的每个成员都是Promise实例。) Promise.all方法接受一个数组作为参数,数组里的元素都是Promise对象的实例,如果不是,就会先调用下面讲到的Promise.resolve方法,将参数转为Promise实例,再进一步处理。(Promise.all方法的参数可以不是数组,但必须具有Iterator接口,且返回的每个成员都是Promise实例。)
示例: var p =Promise.all([p1,p2,p3]); p的状态由p1、p2、p3决定,分为两种情况。 当该数组里的所有Promise实例都进入Fulfilled状态:Promise.all**返回的实例才会变成Fulfilled状态。并将Promise实例数组的所有返回值组成一个数组,传递给Promise.all返回实例的回调函数**。 当该数组里的某个Promise实例都进入Rejected状态:Promise.all返回的实例会立即变成Rejected状态。并将第一个rejected的实例返回值传递给Promise.all返回实例的回调函数。
const promise = new Promise((resolve, reject) => {
console.log(1)
resolve()
console.log(2)
})
promise.then(() => {
console.log(3)
})
console.log(4)
// 1
// 2
// 4
// 3
// Promise 构造函数是同步执行的,promise.then 中的函数是异步执行的。
const promise = new Promise((resolve, reject) => {
resolve('success1')
reject('error')
resolve('success2')
})
promise.then((res) => {
console.log('then: ', res)
}).catch((err) => {
console.log('catch: ', err)
})
// then: success1
// 原因:
// 构造函数中的 resolve 或 reject 只有第一次执行有效,多次调用没有任何作用,呼应代码二结论:promise 状态一旦改变则不能再变。
Promise.resolve(1)
.then((res) => {
console.log(res)
return 2
}).catch((err) => {
return 3
}).then((res) => {
console.log(res)
})
// 运行结果: 1 2
// 原因:
// promise 可以链式调用。提起链式调用我们通常会想到通过 return this 实现,不过 Promise 并不是这样实现的。promise 每次调用 .then 或者 .catch 都会返回一个新的 promise,从而实现了链式调用。
setTimeout、Promise、Async/Await 的区别
事件循环中分为宏任务队列和微任务队列
其中setTimeout的回调函数放到宏任务队列里,等到执行栈清空以后执行
promise.then里的回调函数会放到相应宏任务的微任务队列里,等宏任务里面的同步代码执行完再执行
async函数表示函数里面可能会有异步方法,await后面跟一个表达式
async方法执行时,遇到await会立即执行表达式,然后把表达式后面的代码放到微任务队列里,让出执行栈让同步代码先执行
promise setTimeout setInterval 执行顺序相关推荐
- 【异步系列二】Promise原理及执行顺序详解
前言 Promise 是 javascript 中非常重要的一环,熟悉它是必须的,而且在面试中也常常会问到相关面试题. 在了解 Promise 之前,需要了解什么是异步编程,可以参考我的一篇文章:Ja ...
- 前端每日一解 - setTimeout的执行顺序
先解释一下主任务.微任务和宏任务的概念. 因为JS是单线程,代码中所有同步任务(后面统一称为主任务)都在主线程上执行,形成一个执行栈,栈是先进后出的.代码跑起来以后会先执行栈中的主任务直到所有任务执行 ...
- php 内部异步执行顺序,event_loop中不同异步操作的执行顺序
关于js的单线程.怎么创建一个异步任务都是老生常谈的话题了,我们今天就总结一下js不同的异步操作到底执行顺序如何. 首先我们要明白js两种任务类型,一个是macrotask(宏任务),一个是 micr ...
- Promise和setTimeout执行顺序 面试题
看到过下面这样一道题: (function test() {setTimeout(function() {console.log(4)}, 0);new Promise(function execut ...
- 前端碎碎念 之 nextTick, setTimeout 以及 setImmediate 三者的执行顺序
『前端碎碎念』系列会记录我平时看书或者看文章遇到的问题,一般都是比较基础但是容易遗忘的知识点,你也可能会在面试中碰到. 我会查阅一些资料并可能加上自己的理解,来记录这些问题.更多文章请前往我的个人博客 ...
- 8张图让你一步步看清 async/await 和 promise 的执行顺序
2019独角兽企业重金招聘Python工程师标准>>> **摘要:**面试必问 原文:8张图帮你一步步看清 async/await 和 promise 的执行顺序 作者:ziwei3 ...
- 详解promise、async和await的执行顺序
说明: 本文摘自 详解 promise.async和await的执行顺序. 1.题目和答案 一道题题目:下面这段promise.async和await代码,请问控制台打印的顺序? async func ...
- JS 中关于Promise的用法,状态,执行顺序详解,面试可用(原创)
前言 在实际项目中我们常会去用已经封装好的promise如axios,或者也会自己去封装promise,甚至在面试中,关于promise的面试题也层出不穷,promise的重要性不言而喻,故写该文章记 ...
- Promise.all执行顺序
Promise.all执行顺序 理解 栗子 理解 Promise.all等待所有Promise执行完毕之后,按照放在all中的先后顺序将resolve()返回的数据放在Promise.all的reso ...
最新文章
- ML之xgboost:利用xgboost算法(sklearn+3Split+调参曲线+EarlyStop)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)
- Linux下安装、查看、删除软件包
- YbtOJ#752-最优分组【笛卡尔树,线段树】
- python while break try 无法中断_解码不能正常工作并且while循环不能正确中断python...
- des算法密码多长_密码学中的多个DES
- 利用python处理中国地面气候资料日值数据集(V3.0)
- Python中groupby的简单使用
- 斯坦福李飞飞CS231n笔记1计算机视觉概述与历史背景
- Could not find resource——mybatis 找不到映射器xml文件
- Sketch 56.2 Mac中文版
- 冲突域和广播域的区别
- 基于C#的图书管理系统
- PostgreSQL/pgsql生成随机的姓名的函数
- Rocketmq 消息的同步发送,异步发送,oneway方式
- MinIO-linux-amd64下载
- mdk ac6 CLANG
- 常用的第三方SDK介绍(搜集中)
- pb导入excel文件
- Spreadsheet_Excel_Writer
- diagnosing error in object detectors 浅析
热门文章
- 架设企业文件服务器,企业文件服务器架设
- JavaAndroid零碎的知识点2
- 程序员实现财务自由的9个阶段,你达到了哪一段?
- 对于动态网页和静态网页的理解,以及提供例子说明
- 【ArcGIS Pro微课1000例】0017:ArcGIS Pro 2.8制作炫酷的ETOPO1全球DEM地图
- vb开发使用mysql_使用VB开发SQL Server应用程序
- Windows10下配置iis+php+mysql
- vba textbox2换行属性_“搭积木”编写VBA程序,真的非常简单容易
- Tensorflow读取数据-tf.data.TFRecordDataset
- Plan for the day