promise 及 setTimeout 执行顺序

setTimeout(function() {
    console.log(1);
}, 0);

new Promise(function(res, rej) {
    res(2);
    console.log(0);
}).then(console.log);

console.log(3);

执行顺序如下:

setTimeout 的任务会被排到队列尾部,同步任务执行结束后立即执行 setTimeout(即 console.log(1));

而 promise 一旦建立,其中的任务就会立即执行(即 console.log(0));

最外层的 console.log(3) 为同步任务,则按顺序执行;

promise 中的 then 会等待 resolve 执行结束后即执行(即 res(2));

所以执行后打印出来的顺序为:0、3、2、undefined、1

原文地址:https://www.cnblogs.com/momo798/p/11719512.html

时间: 2024-08-30 15:08:43

promise 及 setTimeout 执行顺序的相关文章

Promise和setTimeout执行顺序 面试题

看到过下面这样一道题: (function test() { setTimeout(function() {console.log(4)}, 0); new Promise(function executor(resolve) { console.log(1); for( var i=0 ; i<10000 ; i++ ) { i == 9999 && resolve(); } console.log(2); }).then(function() { console.log(5);

关于async/await、promise和setTimeout执行顺序

先来一道关于async/await.promise和setTimeout的执行顺序的题目: 1 async function async1() { 2 console.log('async1 start'); 3 await async2(); 4 console.log('asnyc1 end'); 5 } 6 async function async2() { 7 console.log('async2'); 8 } 9 console.log('script start'); 10 set

关于多个Promise对象及then()函数的执行顺序的研究记录

今天终于想要研究一下多个 Promise 对象的执行顺序问题了,在研究完后记录一下. 我想研究的是以下问题: 1.多个 Promise 对象及其then函数的执行顺序,这里不研究处于不同状态的 Promise 对象的执行顺序 2.在 Promise 中的定时器延时问题(这个问题其实在 MDN 和阮一峰老师的 ES6 入门中都讲过,只是我光看文字有点晕,所以自己写代码来理解) 废话不多说,先上代码吧 // 延时执行 new Promise(resolve => setTimeout(() =>

process.nextTick,Promise.then,setTimeout,setImmediate执行顺序

1. 同步代码执行顺序优先级高于异步代码执行顺序优先级: 2. new Promise(fn)中的fn是同步执行: 3. process.nextTick()>Promise.then()>setTimeout>setImmediate 出处:https://www.jb51.net/article/151174.htm 原文地址:https://www.cnblogs.com/mengff/p/10216494.html

每日技术:关于promise,async,setTimeout的执行顺序

前端100问第10题 参考:https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/7 请写出下面代码的运行结果 async function async1() { console.log('async1 start'); await async2(); console.log('async1 end'); } async function async2() { console.log('async2'); } c

setTimeout、Promise、Async/Await 的执行顺序

问题描述:以下这段代码的执行结果 async function async1() { console.log('async1 start'); await async2(); console.log('asnyc1 end'); } async function async2() { console.log('async2'); } console.log('script start'); setTimeout(() => { console.log('setTimeOut'); }, 0);

解读setTimeout,promise.then,process.nextTick,setImmediate的执行顺序

最近在看<Node.js调试指南>的时候遇到有意思的几道题,是关于setTimeout, promise.then, process.nextTick, setImmediate的执行顺序.今天抽空记录下这道题的分析过程及背后的原理与知识点. 题目如下: // 题目一: setTimeout(()=>{ console.log('setTimeout') },0) setImmediate(()=>{ console.log('setImmediate') }) // 题目二: c

vue 同步 $nextTick setTimeout 执行的顺序

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>vue 同步 $nextTick setTimeout 执行的顺序</

js同步异步执行顺序setTimeOut面试题分析

<script> for(var i=0;i<2;i++){ setTimeout(function(){ console.log(i); },0); } </script> // 结果:2,2 打印两个2而不是0,1,跟js执行顺序有关系. 所有的任务分为两种,一种是同步任务,一种是异步任务.同步任务是指在主线程上排队的任务.异步任务是指不进入主线程.而进入"任务队列"(task queue)的任务,只有"任务队列"通知主线程,某个异