Maison > interface Web > js tutoriel > Comprendre en profondeur le sens de la programmation asynchrone NodeJs

Comprendre en profondeur le sens de la programmation asynchrone NodeJs

藏色散人
Libérer: 2022-08-08 14:38:14
avant
1861 Les gens l'ont consulté

Comprenez d'abord ce qu'est la programmation asynchrone

Signification :

  • S'il y a de l'asynchrone, il y aura certainement une synchronisation

  • Chaque fonction de rappel qui existe est un code asynchrone

  • Exécutez d'abord le code synchrone, après avoir vu le code asynchrone, placez le code asynchrone dans la zone d'exécution du code asynchrone (non exécuté en premier)

  • Continuez à exécuter le code synchrone Lorsque toute l'exécution du code synchrone est terminée, exécutez le code asynchrone.

Exemple de code asynchrone :

console.log('1');
setTimeout(()=>{
	console.log('2秒后再执行...');
},2000);
console.log('end');
Copier après la connexion

Le résultat de sortie après l'exécution du programme :
1
Fin
Exécuter à nouveau après 2 secondes...

Résumé : Le code sera exécuté séquentiellement pendant l'exécution, mais lorsque la fonction de rappel est exécutée, ce sera La fonction de rappel est placée dans la zone d'exécution de code asynchrone et n'est pas exécutée au début. Une fois le code exécuté, il est exécuté séquentiellement et placé dans la zone d'exécution de code asynchrone.

Cas de la ligne de code synchronisé :

for(let i=0;i<10;i++){
	console.log(i);
}
console.log(&#39;end&#39;);
Copier après la connexion

Le résultat de sortie après l'exécution du programme :
0123456789
fin
Résumé : Code synchrone, quelle que soit la durée d'exécution de la boucle for, le code suivant doit l'attendre à terminer avant d'être exécuté.

2. Pourquoi y a-t-il une programmation asynchrone ? Nodejs est caractérisé par un seul thread, asynchrone et non bloquant. Si la logique du code implique plusieurs rappels, un code très terrible apparaîtra, ce qui n'est pas propice à une maintenance ultérieure.

Le rôle de la programmation asynchrone est d'améliorer l'efficacité. De nos jours, les programmes sont de plus en plus volumineux, et la pression sur le processeur et la mémoire augmente également. L'asynchrone permet à l'ordinateur de traiter plusieurs transactions en même temps, donc la programmation asynchrone est importante. nécessaire.

3. Comment gérer les problèmes qui surviennent dans la programmation asynchrone

Dans notre projet, il y aura des problèmes. Par exemple, si la valeur ne peut pas être obtenue, elle est indéfinie, à cause de la programmation asynchrone.

Solution : l'imbrication des fonctions de rappel, Promise, wait et async syntax sugar deviennent synchronisées


Il y a maintenant trois fichiers txt 1, 2 et 3 dans le dossier. Nous devons lire ces trois fichiers directement. La commande peut être dans le désordre la deuxième fois, nous devons donc résoudre le problème asynchrone et la laisser s'exécuter dans l'ordre

Utilisez la fonction de rappel pour imbriquer le code :

const fs=require(&#39;fs&#39;)
const path =require(&#39;path&#39;)
let p1=path.join(&#39;1.txt&#39;)
let p2=path.join(&#39;2.txt&#39;)
let p3=path.join(&#39;3.txt&#39;)
fs.readFile(p1,&#39;utf8&#39;,(err,data)=>{
    if(err) throw err
    console.log(data)
    fs.readFile(p2,'utf8',(err,data)=>{
        if(err) throw err
        console.log(data)
        fs.readFile(p3,'utf8',(err,data)=>{
            if(err) throw err
            console.log(data)
        })
    })
})
Copier après la connexion

Utilisez le code de promesse :

// new promise 的作用:让异步代码马上执行
const fs=require('fs')
function readFile(path){
    return new Promise((resolve,reject)=>{
        fs.readFile(path,'utf8',(err,data)=>{
            resolve(data)
        })
    })
}
let p1=readFile('1.txt')
let p2=readFile('2.txt')
let p3=readFile('3.txt')
p1.then(result=>{
    console.log(result)
    return p2
}).then(result=>{
    console.log(result)
    return p3
}).then(result=>{
    console.log(result)
    return p3
})
Copier après la connexion

Très bien, utilisez wait et Code sucre de syntaxe asynchrone :

const path=require('path')
const fs=require('fs')
let p1=readFile('1.txt')
let p2=readFile('2.txt')
let p3=readFile('3.txt')
var readfile=(path)=>{
    return new Promise((resolve,reject)=>{
        fs.readFile(path,'utf8',(err,data)=>{
            resolve(data)
        })
    })
}

async function exec() {
    await readfile(p1).then(result => console.log(result))
    await readfile(p2).then(result => console.log(result))
    await readfile(p3).then(result => console.log(result))
}
exec()
Copier après la connexion

[Recommandé :

Tutoriel vidéo Node.js

]

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal