宝哥软件园

小白的异步JavaScript

编辑:宝哥软件园 来源:互联网 时间:2021-09-03

有一天,我突然写了一个方法,从后台调用数据,显示在前台页面上,但是输出结果总是空的,没有定义,所以得不到数据。我从很多渠道发现,我已经进入了JS异步的“坑”。

我们经常听到单线程、多线程、同步和异步的概念,那么这些是什么呢?让我们从上面的概念开始

对单线程、多线程、同步和异步有基本了解

每个运行的程序(进程)至少有一个线程,称为主线程。主线程是在程序开始执行主功能时创建的。

1.单线程是只有一个主线程的线程,代码从上到下依次运行。主线程负责执行程序的所有代码(UI显示和刷新、网络请求、本地存储等)。)【一个线程要做所有的事情,想起来有点累】

2.多线程,顾名思义,就是有多个线程的程序,可以由用户独立创建。与主线程相比,用户创建的几个进程都是子线程。子线程和主线程是独立的运行单元,它们的执行互不影响,所以可以并发执行。

光听这些干巴巴的理论你会不会觉得有点晕?巧合的是,我第一眼就晕了。

在寻找信息的过程中,我发现了这样一个别人的形象隐喻。

比如单线程就是你去厨房做饭做饭,自己一个人来回跑;多线程就是两个人,一个人做饭,一个人做饭。

那么,应该更好理解吧?

什么是同步和异步?

让我们用一个简单的生活例子来说明。

你打电话预定酒店,问工作人员是否有房间。这时候工作人员需要先搞清楚有没有房间才能回答你。

同步是指不挂电话的等待,直到工作人员告诉你是否有房间。异步就是挂断电话,你做其他事情,比如吃饭喝水,工作人员找到信息后会给你打电话。

这是我们的主题

JS的异步操作是什么?

JS的执行环境是单线程的,也就是说,当程序按顺序执行时,一次只能执行一个任务。一个程序要想跑下来,必须等待当前任务执行,不管当前任务需要执行多长时间(如果后面的程序急着跑出来,真的很难等)。

为了解决后期程序的阻塞问题等。JavaScript有一种异步处理模式,实际上是延迟处理。

让我们抛出一个例子来说明。

var getUserInfo=function () { $。getJSON(' http://www . easy-mock.com/mock/5a 09868228 b 23066479 b 8379/AJaxDATa/GetUserInfo ',function(){ return data;});} var data=GetUserInfo();调用函数renderUserInfo(data)getuserinfo,在后台取数据可能要花费很多时间,这就需要renderUserInfo一直等到数据被取出。好在JS有异步操作。提取数据时,不需要等待数据被提取,而是直接执行。

在这种情况下,这两个函数的执行顺序是什么?别担心,我们来调试一下:

var GetUserInfo=function(){ console . log(' AAA ');$.getJSON(' http://www . easy-mock.com/mock/5a 09868228 b 23066479 b 8379/AJaxDATa/GetUserInfo ',function(){ console . log(' BBB ');返回数据;});} var data=GetUserInfo();console.log(数据);console . log(' CCC ');renderUserInfo(数据);顺序执行的输出最初被认为是“aaa”、“bbb”、“ccc”?

然而,事情并没有那么简单。让我们看看控制台的输出:

输出结果不是连续的。

也就是说,当函数执行到getJSON取数据时,程序在执行下一步之前并不等待它取数据,而是跳过取数据的阶段,直接执行输出数据,所以数据也是空的。

这就是JS的异步机制。

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

更多资讯
游戏推荐
更多+