Home Web Front-end JS Tutorial 3 ways to implement synchronization operations in node.js_node.js

3 ways to implement synchronization operations in node.js_node.js

May 16, 2016 pm 04:29 PM
node.js Synchronous operation

As we all know, asynchronous is a unique feature and advantage, but at the same time, the need for synchronization in the program (for example, the execution order of the control program is: func1 -> func2 ->func3) is also very common. This article records some of my thoughts on this issue.

Function that needs to be executed:

Copy code The code is as follows:

var func1 = function(req,res,callback){
setTimeout(function(){
console.log('in func1');
​ callback(req,res,1);  
},13000);
}
var func2 = function(req,res,callback){
setTimeout(function(){
console.log('in func2');
​ callback(req,res,2);
},5000);
}

var func3 = function(req,res,callback){
setTimeout(function(){
console.log('in func3');
​ callback(req,res,3);  
},1000);
}

It can be seen that the setTimeout function is used in func1, func2 and func3, and the execution time is 13 seconds, 5 seconds and 1 second respectively. Due to the asynchronous nature of nodejs, if you use the ordinary function calling method:

Copy code The code is as follows:

var req = null;
var res = null;
var callback = function(){};
func1(req,res,callback);
func2(req,res,callback);
func3(req,res,callback);

Output content:

Copy code The code is as follows:

in func3
in func2
in func1

The reason is that because nodejs is asynchronous, func2 will not wait for func1 to finish executing, but will execute it immediately (the same is true for func3). Since func3 has the shortest running time, it ends first, followed by func2 and func1 last. But this is obviously not the result we want. what to do?

Solution 1: callback

Copy code The code is as follows:

//Deep nesting
var req = null;
var res = null;

func1(req,res,function(){
func2(req,res,function(){
func3(req,res,function(){
Process.exit(0);
})
});
});

Although this method can be solved quickly, the problems exposed are also obvious. First, the code maintenance is not good, and second, the deep nesting of the code looks very uncomfortable. This approach is not advisable.

Solution 2: Recursive call

Copy code The code is as follows:

function executeFunc(funcs,count,sum,req,res){
if(count == sum){
Return ;
}
else{
funcs[count](req,req,function(){
Count ;
​​​ executeFunc(funcs,count,sum,req,res);
});
}  
}

//Synchronous call
var req = null;
var res = null;
var funcs = [func1,func2,func3];
var len = funcs.length;
executeFunc(funcs,0,len,req,res);

First combine multiple functions into an array. You can then use the characteristics of recursive functions to make the program execute in a certain order.

Solution 3: Call the class library

With the development of nodejs, there are more and more corresponding class libraries. Step and async are good ones.

1. The call of Step is relatively refreshing:

Copy code The code is as follows:

Step(
function thefunc1(){
func1(this);
},
function thefunc2(finishFlag){
console.log(finishFlag);
func2(this);
},
function thefunc3(finishFlag){
console.log(finishFlag);
}
);

2.async’s series method, in this case, its calling method:
Copy code The code is as follows:

var req = null;
var res = null;
var callback = function(){};

async.series(
[
Function(callback){
        func1(req,res,callback);
},
Function(callback){
        func2(req,res,callback);
},
Function(callback){
        func3(req,res,callback); 
}
]
);

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

An article about memory control in Node An article about memory control in Node Apr 26, 2023 pm 05:37 PM

The Node service built based on non-blocking and event-driven has the advantage of low memory consumption and is very suitable for handling massive network requests. Under the premise of massive requests, issues related to "memory control" need to be considered. 1. V8’s garbage collection mechanism and memory limitations Js is controlled by the garbage collection machine

Detailed graphic explanation of the memory and GC of the Node V8 engine Detailed graphic explanation of the memory and GC of the Node V8 engine Mar 29, 2023 pm 06:02 PM

This article will give you an in-depth understanding of the memory and garbage collector (GC) of the NodeJS V8 engine. I hope it will be helpful to you!

Let's talk in depth about the File module in Node Let's talk in depth about the File module in Node Apr 24, 2023 pm 05:49 PM

The file module is an encapsulation of underlying file operations, such as file reading/writing/opening/closing/delete adding, etc. The biggest feature of the file module is that all methods provide two versions of **synchronous** and **asynchronous**, with Methods with the sync suffix are all synchronization methods, and those without are all heterogeneous methods.

Node.js 19 is officially released, let's talk about its 6 major features! Node.js 19 is officially released, let's talk about its 6 major features! Nov 16, 2022 pm 08:34 PM

Node 19 has been officially released. This article will give you a detailed explanation of the 6 major features of Node.js 19. I hope it will be helpful to you!

Let's talk about how to choose the best Node.js Docker image? Let's talk about how to choose the best Node.js Docker image? Dec 13, 2022 pm 08:00 PM

Choosing a Docker image for Node may seem like a trivial matter, but the size and potential vulnerabilities of the image can have a significant impact on your CI/CD process and security. So how do we choose the best Node.js Docker image?

Let's talk about the GC (garbage collection) mechanism in Node.js Let's talk about the GC (garbage collection) mechanism in Node.js Nov 29, 2022 pm 08:44 PM

How does Node.js do GC (garbage collection)? The following article will take you through it.

What should I do if node cannot use npm command? What should I do if node cannot use npm command? Feb 08, 2023 am 10:09 AM

The reason why node cannot use the npm command is because the environment variables are not configured correctly. The solution is: 1. Open "System Properties"; 2. Find "Environment Variables" -> "System Variables", and then edit the environment variables; 3. Find the location of nodejs folder; 4. Click "OK".

Let's talk about the event loop in Node Let's talk about the event loop in Node Apr 11, 2023 pm 07:08 PM

The event loop is a fundamental part of Node.js and enables asynchronous programming by ensuring that the main thread is not blocked. Understanding the event loop is crucial to building efficient applications. The following article will give you an in-depth understanding of the event loop in Node. I hope it will be helpful to you!

See all articles