Maison >interface Web >Questions et réponses frontales >Quelle est la différence entre la synchronisation des nœuds et l'asynchronisme ?

Quelle est la différence entre la synchronisation des nœuds et l'asynchronisme ?

WBOY
WBOYoriginal
2022-04-19 17:25:473050parcourir

La différence entre la synchronisation des nœuds et l'asynchrone est la suivante : la synchronisation signifie que le programme s'exécute de haut en bas et que l'étape suivante ne peut être exécutée qu'après l'exécution de l'étape précédente ; terminer l'exécution avant d'exécuter les opérations suivantes. Programmation asynchrone Cela peut être implémenté en s'appuyant sur des rappels, mais cela ne signifie pas que le programme après le rappel est asynchrone.

Quelle est la différence entre la synchronisation des nœuds et l'asynchronisme ?

L'environnement d'exploitation de ce tutoriel : système windows10, nodejs version 12.19.0, ordinateur Dell G3.

Quelle est la différence entre un nœud synchrone et asynchrone ?

La synchronisation signifie que le programme s'exécute de haut en bas, tandis que asynchrone signifie qu'il n'est pas nécessaire d'attendre la fin de l'exécution de ce qui précède avant d'exécuter les opérations suivantes. La programmation asynchrone repose sur des rappels, mais on ne peut pas dire que le programme devient asynchrone après avoir utilisé des rappels.

Synchronisation en anglais : sync (synchronisation)

Asynchrone anglais : async (asynchrone)

API de synchronisation : ce n'est qu'une fois l'exécution de l'API actuelle terminée que l'API suivante peut continuer à être exécutée

console.log('before'); 
console.log('after');

Asynchrone API : L'API actuelle L'exécution ne bloquera pas l'exécution du code suivant

console.log('before');
setTimeout(
   () => { console.log('last');
}, 2000);
console.log('after');

La différence entre l'API synchrone et l'API asynchrone (obtention de la valeur de retour)

L'API synchrone peut obtenir le résultat de l'exécution de l'API à partir de la valeur de retour, mais l'API asynchrone ne peut pas (il semble que dans Vous ne pouvez pas obtenir de résultats même si vous écrivez return dans une API asynchrone ? )

// 异步
  function getMsg () { 
      setTimeout(function () { 
          return { msg: 'Hello Node.js' }
      }, 2000);
  }
  const msg = getMsg (); //函数没有写return 默认是返回 undefined
cnsole.log(msg); // 输出的是 undefined,因为定时器还没执行完就执行了输出

Fonction de rappel

Définissez votre propre fonction et laissez les autres l'appeler.

// getData函数定义
 function getData (callback) {}
  // getData函数调用
 getData (() => {});
/*例子------------------*/
function getMsg (callback) {
    setTimeout(function () {
        callback ({ msg: 'Hello Node.js' })
    }, 2000);
}
getMsg (function (msg) { 
    console.log(msg);
});

La différence entre l'API synchrone et l'API asynchrone (ordre d'exécution du code)

L'API synchrone est exécutée dans l'ordre de haut en bas. Le code précédent bloquera l'exécution du code suivant

L'API asynchrone ne le fera pas. attendez la fin de l'exécution de l'API avant de descendre. Code d'exécution

Analyse de la séquence d'exécution du code

JavaScript est divisé en zone d'exécution de code synchrone et zone d'exécution de code asynchrone, et il existe une connexion de file d'attente de fonction de rappel entre elles. Tout d'abord, JavaScript exécutera tout le contenu de la zone de code synchrone, puis se rendra dans la zone de code asynchrone pour exécuter le code, trouvera le bloc de code qui a été exécuté dans la zone de code asynchrone et trouvera immédiatement la fonction de rappel correspondant au bloc de code asynchrone et placez-le dans la zone d'exécution de code synchrone. Pour exécuter l'API asynchrone dans l'API du fichier

Node.js

read, il existe une fonction de rappel.

L'API de surveillance des événements dispose également de fonctions de rappel. (La fonction de traitement des événements est la fonction de rappel et l'API d'écoute des événements est l'API asynchrone)

Si l'exécution du code derrière l'API asynchrone dépend du résultat d'exécution de l'API asynchrone actuelle, mais en fait l'API asynchrone a n'a pas renvoyé le résultat lorsque le code suivant est exécuté, ce problème Comment le résoudre ?

Par exemple, il y a une exigence : lire un fichier A, un fichier B, un fichier C dans l'ordre (lire A, puis B, puis C, ne peut pas être lu en même temps)

Si l'exigence ci-dessus est réalisée, elle sera conduire à l'opération de lecture de B Mettez-le dans la fonction de rappel de A, et l'opération de lecture de C est mise dans la fonction de rappel de B, ce qui entraîne de nombreux niveaux d'imbrication (l'enfer du rappel)

const fs = require('fs');
fs.readFile('./1.txt', 'utf8', (err, result1) => {
console.log(result1)
fs.readFile('./2.txt', 'utf8', (err, result2) => {
console.log(result2)
fs.readFile('./3.txt', 'utf8', (err, result3) => {
console.log(result3)
})
})
});

Apprentissage recommandé : "vidéo nodejs tutoriel"

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:
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