js异步之间执行的顺序

今天同事问了一个问题,怎么让ajax中的回调(保持异步)先执行,再让普通的function执行。。。

整了个解决办法:

如下:

<!DOCTYPE html>
<html>
<head>
    <title>lhy1</title>
</head>
<body>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<script type="text/javascript">
      debugger;
    (function(){
    // 建个ajax
    $.ajax({
        type:‘POST‘,
        contentType:"application/json",
        url:"https://api.douban.com/v2/movie/top250?start=0&count=10",
        success: (result) => {
            console.log(result);
            console.log("RRRRRRRRRRRRRRRRRRRrr")
        },
        error: (err) => {
            console.log(err)
        }

    })
})();
setTimeout(() => {console.log("HHHHHH")},1)

</script>
</body>
</html>

将同步代码放入setTimeout中,变成异步,则和ajax中的回调同为异步,则按照异步的方式来排列执行顺序。

由此引入异步之间的执行顺序问题!

首先常见的异步一般有:ajax可以异步也可同步、回调、setTimeout系列、事件绑定。  而es6中的新增的promise、async/await。

按照js的执行顺序,先执行同步,再执行异步。那么上面这些异步的执行之内该如何执行呢?

首先了解一下宏任务和微任务。

在js执行机制中,除了同步任务和异步任务,还有宏任务和微任务。

  • 宏任务:整体代码script、setTimeout、setInterval。
  • 微任务:Promise、Promise.nextTick、回调

在js执行的时候,会先执行同步,异步被放入异步队列中,而不同的异步任务会被放入不同的异步队列中。

每次js执行,先从整体scripts也就是一个宏任务进入,执行完里面所有的微任务以后(也就是同步任务被执行完),再去异步的任务队列中,找到下一个宏任务,执行里面的所有微任务,如果没有宏任务了,则执行任务队列中的所有微任务。

所以异步的执行顺序是按照谁是宏任务,谁是微任务来执行的。

则定时器是异步中的老大,先执行。而IIFE是老大中的老大,更先执行,因为它设计的原理是要隔离作用域,不需要等待任何异步即可执行。

哈哈

原文地址:https://www.cnblogs.com/DaYesahh/p/11437442.html

时间: 2024-07-31 10:33:42

js异步之间执行的顺序的相关文章

node js 异步执行流程控制模块Async介绍

1.Async介绍 sync是一个流程控制工具包,提供了直接而强大的异步功能.基于Javascript为Node.js设计,同时也可以直接在浏览器中使用. Async提供了大约20个函数,包括常用的 map, reduce, filter, forEach 等,异步流程控制模式包括,串行(series),并行(parallel),瀑布(waterfall)等. 项目地址:https://github.com/caolan/async 2. Async安装 npm install async 3.

JS异步执行之setTimeout 0的妙用

最近在工作中遇到一些问题,大致是关于js执行问题的.由于没搞清执行顺序,导致出现了一些奇怪的bug. 所以这里整理一些有关异步执行的知识(冰山一角角)... 大家都知道js是单线程的,执行起来是顺序的,在顺序的业务逻辑中当然没有问题.如果遇到可以并发执行的业务逻辑,再排队就很低级了,所以需要异步执行! 1.什么是异步? setTimeout(function(){ console.log(0); },0) console.log(1); // 先打印 1 // 再打印 0 比方说有些饭店你去吃饭

javascript--函数的声明及调用/JS中代码执行顺序

[函数的声明及调用] 1.函数声明格式: function 函数名(参数1,参数2,参数3--){ //函数体 return 结果: } 函数调用的格式: 函数名(参数1的值,参数2的值,--): 事件调用:事件名=函数名(): 2.函数声明的几点强调: ① 函数的声明,必须符合小驼峰法则(首字母小写,之后每个单词首字母大写): ② 参数的列表,可以有参数,可以无参数.分别称为有参函数,无参函数: ③ 声明函数时的参数列表,称为"形参列表"(变量的名): 调用函数时的参数列表,称为&q

浅析JS异步执行机制

前言 JS异步执行机制具有非常重要的地位,尤其体现在回调函数和事件等方面.本文将针对JS异步执行机制进行一个简单的分析. 从一份代码讲起 下面是两个经典的JS定时执行函数,这两个函数的区别相信对JS有一定基础的同学是十分清楚的.timeout仅仅只会执行一次,而interval则会执行多次. setTimeout(function (args) { console.log('timeout') }, 1000); setInterval(function (args) { console.log

Javascript教程:js异步编程的4种方法详述(转载)

文章收集转载于(阮一峰的网络日志) 你可能知道,Javascript语言的执行环境是“单线程”(single thread). 所谓“单线程”,就是指一次只能完成一件任务.如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推. 这种模式的好处是实现起来比较简单,执行环境相对单纯:坏处是只要有一个任务耗时很长,后面的任务都必须排队等着,会拖延整个程序的执行.常见的浏览器无响应(假死),往往就是因为某一段Javascript代码长时间运行(比如死循环),导致整个页面卡在这个地方

现代浏览器JS异步加载方案

好,不说废话,要凌晨了我快点写完,关于JS加载阻塞之类的不做科普,本文也不讨论IE9以下的浏览器. headjs:"异步.并行加载并按你的顺序执行",这个是最符合广大码农需求的,只是它越来越臃肿,连CSS Respone什么的都加进去了,没必要那么复杂 Loadjs:今天刚刚出现在OSC首页本人疯狂测试后发现,如果需要并行加载就是乱序的(哪个JS先下载完就先执行谁),如果要顺序下载就不能并发,经测试是下载一个执行一个,每个JS文件之间有10ms的空隙(JS下载和加载时所有渲染操作都要暂

深入理解node.js异步编程

1. 概述目前开源社区最火热的技术当属Node.js莫属了,作为使用Javascript为主要开发语言的服务器端编程技术和平台,一开始就注定会引人瞩目. 当然能够吸引众人的目光,肯定不是三教九流之辈,必然拥有独特的优势和魅力,才能引起群猿追逐.其中当属异步IO和事件编程模型,本文据Node.js的异步IO和事件编程做深入分析. ##2. 什么是异步同步和异步是一个比较早的概念,大抵在操作系统发明时应该就出现了.举一个最简单的生活中的例子,比如发短信的情况会比较好说明他们的区别:同步:正在处于苦逼

JS 异步编程六种方案

前言我们知道Javascript语言的执行环境是"单线程".也就是指一次只能完成一件任务.如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务. 这种模式虽然实现起来比较简单,执行环境相对单纯,但是只要有一个任务耗时很长,后面的任务都必须排队等着,会拖延整个程序的执行.常见的浏览器无响应(假死),往往就是因为某一段Javascript代码长时间运行(比如死循环),导致整个页面卡在这个地方,其他任务无法执行. 为了解决这个问题,Javascript语言将任务的执行模式分成两种

页面优化——js异步加载

同步加载 在介绍js异步加载之前,我们先来看看什么是js同步加载.我们平时最常使用的就是这种同步加载形式: <script src="http://XXX.com/script.js"></script> 同步模式,又称阻塞模式,会阻止浏览器的后续处理,停止了后续的解析,因此停止了后续的文件加载(如图像).渲染.代码执行.一般的script标签(不带async等属性)加载时会阻塞浏览器,也就是说,浏览器在下载或执行该js代码块时,后面的标签不会被解析,例如在he