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 执行顺序相关推荐

  1. 【异步系列二】Promise原理及执行顺序详解

    前言 Promise 是 javascript 中非常重要的一环,熟悉它是必须的,而且在面试中也常常会问到相关面试题. 在了解 Promise 之前,需要了解什么是异步编程,可以参考我的一篇文章:Ja ...

  2. 前端每日一解 - setTimeout的执行顺序

    先解释一下主任务.微任务和宏任务的概念. 因为JS是单线程,代码中所有同步任务(后面统一称为主任务)都在主线程上执行,形成一个执行栈,栈是先进后出的.代码跑起来以后会先执行栈中的主任务直到所有任务执行 ...

  3. php 内部异步执行顺序,event_loop中不同异步操作的执行顺序

    关于js的单线程.怎么创建一个异步任务都是老生常谈的话题了,我们今天就总结一下js不同的异步操作到底执行顺序如何. 首先我们要明白js两种任务类型,一个是macrotask(宏任务),一个是 micr ...

  4. Promise和setTimeout执行顺序 面试题

    看到过下面这样一道题: (function test() {setTimeout(function() {console.log(4)}, 0);new Promise(function execut ...

  5. 前端碎碎念 之 nextTick, setTimeout 以及 setImmediate 三者的执行顺序

    『前端碎碎念』系列会记录我平时看书或者看文章遇到的问题,一般都是比较基础但是容易遗忘的知识点,你也可能会在面试中碰到. 我会查阅一些资料并可能加上自己的理解,来记录这些问题.更多文章请前往我的个人博客 ...

  6. 8张图让你一步步看清 async/await 和 promise 的执行顺序

    2019独角兽企业重金招聘Python工程师标准>>> **摘要:**面试必问 原文:8张图帮你一步步看清 async/await 和 promise 的执行顺序 作者:ziwei3 ...

  7. 详解promise、async和await的执行顺序

    说明: 本文摘自 详解 promise.async和await的执行顺序. 1.题目和答案 一道题题目:下面这段promise.async和await代码,请问控制台打印的顺序? async func ...

  8. JS 中关于Promise的用法,状态,执行顺序详解,面试可用(原创)

    前言 在实际项目中我们常会去用已经封装好的promise如axios,或者也会自己去封装promise,甚至在面试中,关于promise的面试题也层出不穷,promise的重要性不言而喻,故写该文章记 ...

  9. Promise.all执行顺序

    Promise.all执行顺序 理解 栗子 理解 Promise.all等待所有Promise执行完毕之后,按照放在all中的先后顺序将resolve()返回的数据放在Promise.all的reso ...

最新文章

  1. ML之xgboost:利用xgboost算法(sklearn+3Split+调参曲线+EarlyStop)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)
  2. Linux下安装、查看、删除软件包
  3. YbtOJ#752-最优分组【笛卡尔树,线段树】
  4. python while break try 无法中断_解码不能正常工作并且while循环不能正确中断python...
  5. des算法密码多长_密码学中的多个DES
  6. 利用python处理中国地面气候资料日值数据集(V3.0)
  7. Python中groupby的简单使用
  8. 斯坦福李飞飞CS231n笔记1计算机视觉概述与历史背景
  9. Could not find resource——mybatis 找不到映射器xml文件
  10. Sketch 56.2 Mac中文版
  11. 冲突域和广播域的区别
  12. 基于C#的图书管理系统
  13. PostgreSQL/pgsql生成随机的姓名的函数
  14. Rocketmq 消息的同步发送,异步发送,oneway方式
  15. MinIO-linux-amd64下载
  16. mdk ac6 CLANG
  17. 常用的第三方SDK介绍(搜集中)
  18. pb导入excel文件
  19. Spreadsheet_Excel_Writer
  20. diagnosing error in object detectors 浅析

热门文章

  1. 架设企业文件服务器,企业文件服务器架设
  2. JavaAndroid零碎的知识点2
  3. 程序员实现财务自由的9个阶段,你达到了哪一段?
  4. 对于动态网页和静态网页的理解,以及提供例子说明
  5. 【ArcGIS Pro微课1000例】0017:ArcGIS Pro 2.8制作炫酷的ETOPO1全球DEM地图
  6. vb开发使用mysql_使用VB开发SQL Server应用程序
  7. Windows10下配置iis+php+mysql
  8. vba textbox2换行属性_“搭积木”编写VBA程序,真的非常简单容易
  9. Tensorflow读取数据-tf.data.TFRecordDataset
  10. Plan for the day