关于面试中异步与延时执行顺序的预期结果问题(代码片段)

wenqiangit wenqiangit     2023-01-14     629

关键词:

  1. 理解同步与异步的概念(看第一个图)

  2. 宏任务与微任务,简单说主线程上的最外层代码块就是宏任务(包括Promise和setTimeout),

     如果最外层代码块是异步任务,那么它内部的任务就是微任务
  3. 宏任务与微任务相当于主线程和子线程的关系,但是可以理解为js中只有一个主线程和一个子线程

技术分享图片

技术分享图片

// 主线程的宏任务
setTimeout(() => 
    // 子线程的宏任务
    new Promise((resolve, reject) => 
        console.log(1);
        resolve();
    ).then(() => 
        // 子线程的微任务
        console.log(2)
    );

    // 子线程的宏任务
    console.log(3);

    // 子线程的宏任务
    setTimeout(() => 

        // 子线程的微任务
        console.log(4)
    , 1000)

, 1000);

// 主线程的宏任务
console.log(5);


所以 预期结果是 5>1>3>2>4

js执行顺序+同步异步

...,循环5次开启了5个延迟器,延时器内部的回调函数将会异步执行,会在延时1s后进入消息队列等待执行。循环了5次,所以此时i的值为5,然后同步执行console.log打印5,第一次同步执行结束,然后开始执行消息队列的异步任务,... 查看详情

关于多个promise对象及then()函数的执行顺序的研究记录(代码片段)

今天终于想要研究一下多个Promise对象的执行顺序问题了,在研究完后记录一下。我想研究的是以下问题:1、多个Promise对象及其then函数的执行顺序,这里不研究处于不同状态的Promise对象的执行顺序2、在Promise中的定时器延时问... 查看详情

通过节点的异步/等待不需要按预期顺序返回结果 - 使用啥正确模式?

】通过节点的异步/等待不需要按预期顺序返回结果-使用啥正确模式?【英文标题】:Async/AwaitthroughNoderequirenoreturningresultsinanticipatedorder-Whatiscorrectpatterntouse?通过节点的异步/等待不需要按预期顺序返回结果-使用什么正确模式?【... 查看详情

关于asyncawait的测试(代码片段)

asyncawait的教程:https://www.cnblogs.com/zhaoshujie/p/11192036.html 异步方法:privateasyncTask<string>TestAsync()Console.WriteLine("异步方法开始");vartask=Task.Run(()=>Thread.Sleep(2000);Console.WriteLine("在新线程中");return"新线程结束";);varresult=awaittask;... 查看详情

java中如何保证线程顺序执行

...何时分配时间片,线程可以看成是相对于的主线程的一个异步操作。publicclassFIFOThreadExample{publicsynchronizedstaticvoidfoo(Stringname){System. 查看详情

关于promise(代码片段)

1.异步回调1.1回调地狱在需要多个操作的时候,会导致多个回调函数嵌套,导致代码不够直观,就是常说的回调地狱1.2并行结果如果几个异步操作之间并没有前后顺序之分,但需要等多个异步操作都完成后才能执行后续的任务,无... 查看详情

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

<script>for(vari=0;i<2;i++){setTimeout(function(){console.log(i);},0);}</script>  //结果:2,2打印两个2而不是0,1,跟js执行顺序有关系。所有的任务分为两种,一种是同步任务,一种是异步任务。同步任务是指在主线程上排队的任务... 查看详情

面试官必问java并发知识总结-同步与锁(代码片段)

同步对象与锁 什么叫java同步?就是java用来保证多线程在共享的内存或临界区,能够可以按照可以预期的行为去顺序执行。如果不做这个同步,那么线程的行为就不可以预期。解释这个问题最好的就是给个实践的例... 查看详情

关于promise详解(代码片段)

异步回调回调地狱在需要多个操作的时候,会导致多个回调函数嵌套,导致代码不够直观,就是常说的回调地狱并行结果如果几个异步操作之间并没有前后顺序之分,但需要等多个异步操作都完成后才能执行后续的任务,无法实... 查看详情

javascript异步机制

单线程异步执行的JavaScriptJavaScript是单线程异步执行的,单线程意味着代码在任务队列中会按照顺序一个接一个的执行。异步代表JavaScript代码在任务队列中的顺序并不完全等同于代码的书写顺序,比如事件绑定、Ajax、setTimeout()... 查看详情

架构笔记[一]:同步与异步

...,调用函数执行完后再进行下一步操作。第二阶段:完全异步  问题:同步操作中,有些函数执行比较耗时,导致程序整体可用性的降低,用户体验差。  解决:通过异步方式,不等待函数返回即执行下一步。等到函数执行... 查看详情

javascript异步编程

  在一年前初学js的时候,看过很多关于异步编程的讲解。但是由于实践经验少,没有办法理解的太多,太理论的东西也往往是看完就忘。  经过公司的三两个项目的锻炼,终于对js异步编程有了比较具体的理解。但始终入... 查看详情

c#中异步的问题,dispatcher.invokeasync的执行结果为何是这样的?

...么结果为abbaabbaabba这样的形式出现呢因为两个线程虽说是异步执行,在宏观看来是同时执行的,但是大多个人电脑只有一个cpu并不是多CPU,也就是说并不能真正实现多个线程同时执行;但为了达到类似的效果,cpu处理采用时间片... 查看详情

关于promise

promise是什么?1、主要用于异步计算2、可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果3、可以在对象之间传递和操作promise,帮助我们处理队列为什么会有promise?为了避免界面冻结(任务)   同步... 查看详情

vueaxios异步处理方案(代码片段)

...,这个函数就必须用async修饰,否则报错。   关于newPromise()的具体解说,可以参考这篇文章:https://blog.csdn.net/qq_34645412/article/details/ 查看详情

angularjs如何实现异步(代码片段)

什么是异步执行?各语句执行结束的顺序与语句执行开始的顺序并不一定相同。在angularJS中,可以理解成界面可以操作,但是有一个程序在后面默默的执行,执行成功后可以控制界面显示结果。AngularJS如何实现异... 查看详情

关于异步执行顺序

 知道由于异步,一下代码会生产5个51for(vari=0;i<5;i++){2setTimeout(function(){3console.log(i);4},1000*i);5} 我们可以通过创建块级作用域的方式保存当前变量。然而如果有Promise参与呢?1setTimeout(function(){2console.log(1)3},0);4newPromise( 查看详情

关于时间片调度算法issue的分析与解决(代码片段)

本文由RT-Thread论坛用户@blta原创发布:https://club.rt-thread.org/ask/article/b3b36a52556382b2.html在之前rt_schedule中need_insert_from_thread的问题提问中,笔者提出了当前时间片调度算法过于复杂,且高优先级一旦打断未执行完时间... 查看详情