What is javascript asynchronous? What is the use?
This article brings you what is javascript asynchronous? What is the use? It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.
What is js asynchronous?
We know that JavaScript is single-threaded, which is related to its purpose. As a browser scripting language, JavaScript's main purpose is to interact with users and manipulate the DOM. This determines that it can only be single-threaded, otherwise it will cause very complex synchronization problems. For example, suppose JavaScript has two threads at the same time. One thread adds content to a certain DOM node, and the other thread deletes the node. In this case, which thread should the browser use?
The so-called "single thread" means that only one task can be completed at a time. If there are multiple tasks, they must be queued. After the previous task is completed, the next task will be executed, and so on.
The advantage of this mode is that it is relatively simple to implement and the execution environment is relatively simple; the disadvantage is that as long as one task takes a long time, subsequent tasks must be queued up, which will delay the execution of the entire program. Common browser unresponsiveness (suspended death) is often caused by a certain piece of Javascript code running for a long time (such as an infinite loop), causing the entire page to get stuck in this place and other tasks cannot be performed.
Ajax's synchronous request will cause the browser to freeze, because it will lock the browser's UI (buttons, menus, scroll bars, etc.) and block all user interactions. Ajax in jquery has such a synchronous request Function must be used with caution, especially when the amount of data requested is large, avoid using synchronous requests.
Give a few chestnuts to feel asynchronous
The background interface uses easy-mock, the official address: https://easy-mock.com/
ajax uses axios, the basic code is as follows
nbsp;html>
<meta>
<meta>
<meta>
<title>javascript异步</title>
<script></script>
<button>点击</button>
<script>
{
let myData = null
//ajax请求
function ajax() {
axios.get('https://easy-mock.com/mock/5b0525349ae34e7a89352191/example/mock')
.then(data => {
console.log("ajax返回成功");// handle success
myData = data.data
console.log(myData);
})
.catch(error => {
// console.log(error); // handle error
console.log("ajax返回失败");
})
}
}
</script>
Let’s see the effect by adding some js,
Asynchronous-Timer
console.log(myData);
setTimeout(() => {
console.log('定时器');
}, 2000);
console.log(myData);
Output, there should be no suspense
//null //null //定时器
Execution order:
Execute the first one first console.log(myData);
Then the timer is encountered and the timer is suspended (that is, the timer is suspended)
Continue to execute the second console.log(myData);
Nothing can be executed js code, go back and continue executing the suspended task
Continue to look at the next chestnut
Asynchronous-ajax
console.log(myData); ajax() console.log(myData);
Look at the output, there is still no suspense
//null
//null
//ajax返回成功
//{success: true, data: {…}}(这是接口返回的数据,我们不必关心返回的具体内容,只要知道返回了就好,陌上寒注)
The execution sequence is basically similar to the timer above, so I won’t go into details here.
Combine the two chestnuts, let’s take a look at the
console.log(myData);
ajax()
setTimeout(() => {
console.log('定时器');
}, 2000);
console.log(myData);
output.
//null
//null
//ajax返回成功
//{success: true, data: {…}}
//定时器
Did you find the problem? When two asynchronous functions meet, which one will be executed first? Whoever runs faster will be executed first?
It can also be said that, in fact, this leads to another knowledge point,
Task queue and event loop
Both console.log(myData); are executed synchronously, they are both Executed on the main thread of js,
There is also a task queue outside the main thread, and the task queue stores content that needs to be executed asynchronously
When the main thread finishes running, the tasks in the task queue will be executed. (Continuously repeat scanning) until the task queue is cleared
Observe this code
console.log(1);
setTimeout(function () {
console.log(2);
}, 1000);
console.log(3);
Output: 1, 3, 2, there is nothing to explain
Look at another piece of code
setTimeout(function(){console.log(1);}, 0);
console.log(2);
Output: 2, 1, why is this?
console.log(2); In the main thread, it is executed first,
setTimeout(function(){console.log(1);}, 0); is placed in the task queue,
only The content in the task queue will not be executed until the main thread has finished executing.
Why do we need to continuously scan the contents of the task queue after the main thread's task is executed?
Looking at this code will help you understand
console.log(myData);
ajax()
setTimeout(() => {
console.log('定时器');
}, 2000);
console.log(myData);
const btn = document.querySelector('button')
btn.onclick = () => {
console.log("点击了");
}
We added a click event to the button button, and kept clicking the button while the browser was refreshing (of course Manually click)
Look at the output:
//null
//null
//(10次输出)点击了
//ajax返回成功
//{success: true, data: {…}}
//定时器
//点击了
Can we understand why the main thread has to scan the task queue in a loop?
Each round of the event loop is called a tick (do you think of nextTick in vue?)
When user interaction occurs (mouse click event, page scroll event, window size change event, etc.), ajax, Timers, timers, etc. will add events to the task queue in the event loop and then wait for execution.
What are the scenarios for front-end asynchronous?
Scheduled tasks: setTimeout, setInverval
Network requests: ajax requests, dynamic loading of img images
-
Event binding or DOM event, such as a click event, I don't know when it clicked, but before it clicked, what should I do. When registering a type of event with addEventListener, the browser will have a separate module to receive this thing. When the event is triggered, a certain module of the browser will throw the corresponding function into the asynchronous queue. If now If the execution stack is empty, this function will be executed directly.
Promise in ES6
When is asynchronous required:
When a wait may occur Situation
When the program cannot be blocked like alert during the waiting process
Therefore, all "waiting situations" need to be asynchronous
In one sentence, you need to use asynchronous
when you need to wait but cannot block the program.Asynchronous and Parallel
Don’t confuse asynchronous and parallel,
Asynchronous is single-threaded, parallel is multi-threaded
Asynchronous: The tasks of the main thread are synchronized Only after the execution is completed will the asynchronous tasks in the task queue be executed sequentially
Parallel: Two or more event chains are executed alternately over time, so that from a higher level, they appear to be running at the same time (although Only handle one event at any time)
The above is the detailed content of What is javascript asynchronous? What is the use?. For more information, please follow other related articles on the PHP Chinese website!
Mastering the Command Line for JavaScript DevelopersJul 24, 2025 am 03:59 AMMaster basic but in-depth command line skills: proficient in using Tab completion, history, Ctrl R search, pwd positioning and ls-la to view hidden files; 2. Efficiently use Node.js and package manager: make good use of npminit-y, --save-dev, npx without installation and operation, npmrun scripts and outdated inspection, and optimize pnpm speed up; 3. Accurate search code and log: combine grep-r/-i, find files, jq formatted JSON and xargs to find JS files with specific content; 4. Write simple script automation tasks: such as deploy.sh one-click deployment, chmod x grant execution rights; 5. Custom Sh
How to check if a variable is an array in JS?Jul 24, 2025 am 03:58 AMTo determine whether the variable is an array type, the Array.isArray() method is preferred, and secondly, Object.prototype.toString.call() can be used. 1.Array.isArray(variable) returns true or false, suitable for modern browsers and Node.js; 2.Object.prototype.toString.call(variable)==='[objectArray]', compatible with old environments. Avoid using typeof and instanceof because they have flaws in judging arrays. Choose the right method according to your needs: Priority is given if there is no need to be compatible with old versions
JavaScript Dependency Management StrategiesJul 24, 2025 am 03:58 AMKeep dependency version consistent, update dependencies regularly, distinguish dependencies types, and use Monorepo to manage multi-project dependencies. 1. Use package-lock.json or yarn.lock to submit to Git to ensure environmental consistency; 2. Check the dependency tree regularly to avoid duplicate installation and conflicts; 3. Use npmoutdated or yarnoutdated to check for updates, prioritize security issues and evaluate the impact of major version upgrades; 4. Clearly distinguish dependencies and devDependencies to avoid misinstalling development tools in the production environment; 5. Use tools such as Lerna or Nx to uniformly manage shared dependencies and code of multiple projects to improve collaboration efficiency.
Advanced JavaScript Testing Strategies with Jest and PlaywrightJul 24, 2025 am 03:56 AMUse Jest's MockFunctions and Timers to control asynchronous behavior, and improve testing efficiency through jest.fn() and jest.useFakeTimers(); 2. Use Fixtures and PageObjectModel (POM) in Playwright to improve maintainability and encapsulate common operations and page logic; 3. Jest and Playwright can jointly achieve comprehensive coverage of unit tests and end-to-end tests; 4. Playwright's TraceViewer can be used to intuitively debug failed tests. These strategies respectively optimize testing efficiency, code structure, test level coverage and debugging capabilities, and are suitable for complex projects
How to Use Bun: The All-in-One JavaScript ToolkitJul 24, 2025 am 03:54 AMBun is a modern JavaScript runtime that can replace tools such as Node.js, npm and Webpack. Its core advantage lies in speed. 1. Bun is built on Zig, using the JavaScriptCore engine, which can directly run JavaScript and TypeScript files without additional configuration; 2. It has a built-in package manager, supports installation dependencies from npm, and speeds are 10-100 times faster than npm, and generates bun.lockb lock files; 3. Built-in native packager, supports minimization, environment variables, code segmentation and other functions, which can replace Webpack or esbuild; 4. Provides a quick test runner with Jest syntax, automatically searching
Real-time Communication with JavaScript WebSocketsJul 24, 2025 am 03:50 AMTo achieve real-time communication, the key to using JavaScript's WebSocket is to understand its basic usage and common scenarios. 1. Only one line of code is required to establish a connection: constsocket=newWebSocket('ws://example.com/socket');, using open, message, error, and close events to handle the connection status; 2. Send and receive data in JSON format, send through socket.send(), listen to message events to receive and parse data; 3. Handle disconnection and reconnection, you can automatically reconnect by listening to close and error events, combined with setTimeout,
ES Modules vs. CommonJS: A Detailed ComparisonJul 24, 2025 am 03:50 AMESModules (ESM) and CommonJS are two module systems of JavaScript. The main differences are syntax, loading mechanism, execution timing, environment support and interoperability. 1. Syntax, ESM uses import/export static declaration, and CommonJS uses require()/module.exports to dynamically assign values. 2. In terms of loading mechanism, ESM supports static analysis and tree-shaking. CommonJS is dynamically loaded at runtime, with high flexibility but not conducive to optimization. 3. In execution time, ESM can obtain the latest value through real-time binding; CommonJS cache module output may return part
Advanced Error Handling Strategies in JavaScript and Node.jsJul 24, 2025 am 03:47 AMDefinecustomerrorclasseslikeValidationErrorandDatabaseErrortoenablepreciseerrorhandlingusinginstanceofandimproveloggingconsistency.2.Usecentralizederror-handlingmiddlewareinExpress.jsbypassingerrorstonext()anddefiningaglobalerrorhandlertostandardizer


Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.








