Je fais du Javascript basé sur le Web (vanilla JS, jQuery, Backbone, etc.) depuis quelques années maintenant, et récemment j'ai travaillé avec Node.js. Il m'a fallu un certain temps pour me familiariser avec la programmation "non bloquante", mais je me suis maintenant habitué à utiliser les rappels pour les opérations d'E / S et ainsi de suite.
Je comprends que Javascript est un thread unique par nature. Je comprends le concept de la «file d'attente d'événements» du nœud. Ce que je ne comprends pas, c'est ce qui détermine si une opération javascript individuelle est "bloquante" par rapport à "non bloquante". Comment savoir de quelles opérations je peux dépendre pour produire une sortie de façon synchrone à utiliser dans un code ultérieur, et à quelles opérations je dois passer des rappels pour pouvoir traiter la sortie une fois l'opération initiale terminée? Y a-t-il une liste de fonctions Javascript quelque part qui sont asynchrones / non bloquantes, et une liste de celles qui sont synchrones / bloquantes? Qu'est-ce qui empêche mon application Javascript d'être une condition de course géante?
Je sais que les opérations qui prennent beaucoup de temps, comme les opérations d'E / S dans le nœud et les opérations AJAX sur le Web, nécessitent qu'elles soient asynchrones et utilisent donc des rappels - mais qui détermine ce qui peut être qualifié de "long temps"? Existe-t-il une sorte de déclencheur dans ces opérations qui les supprime de la "file d'attente d'événements" normale? Sinon, qu'est-ce qui les différencie des opérations simples telles que l'attribution de valeurs à des variables ou la boucle à travers des tableaux, sur lesquels il semble que nous pouvons compter pour terminer de manière synchrone?
Peut-être que je n'y pense même pas correctement - en espérant que quelqu'un puisse me redresser. Merci!