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

Comprendre en profondeur le sens de la programmation asynchrone NodeJs

藏色散人
藏色散人avant
2022-08-08 14:38:141753parcourir

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');

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;);

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)
        })
    })
})

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
})

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()

[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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer