1
00:00:03,920 --> 00:00:08,675
Dans cette conférence et l'exercice qui suit,

2
00:00:08,675 --> 00:00:12,000
nous allons parler spécifiquement de Callback Hell.

3
00:00:12,000 --> 00:00:15,330
Le problème qui se pose lorsque vous écrivez des

4
00:00:15,330 --> 00:00:19,980
rappels dans le nœud et en particulier les rappels et le nœud imbriqués.

5
00:00:19,980 --> 00:00:26,795
Nous allons également considérer les promesses comme une façon de résoudre le problème de l'enfer de rappel.

6
00:00:26,795 --> 00:00:34,340
Pour vous donner une idée de ce que le problème typique de Callback Hell va entraîner,

7
00:00:34,340 --> 00:00:40,115
nous allons revoir le fichier index.js de l'exercice précédent.

8
00:00:40,115 --> 00:00:44,020
Comme je parlais de cela dans l'exercice précédent,

9
00:00:44,020 --> 00:00:47,959
vous remarquez que pour chacune des opérations que nous effectuons,

10
00:00:47,959 --> 00:00:53,990
l'opération suivante est incluse dans la fonction de rappel ici

11
00:00:53,990 --> 00:01:00,320
et ainsi de suite jusqu'à ce que vous formiez une pyramide comme structure aller à nouveau.

12
00:01:00,320 --> 00:01:06,160
Donc, vous voyez cette structure comme pyramide apparaissant dans votre code.

13
00:01:06,160 --> 00:01:11,540
Maintenant, imaginez que vous devez effectuer plusieurs opérations imbriquées comme celle-ci,

14
00:01:11,540 --> 00:01:13,850
votre code deviendra très bientôt,

15
00:01:13,850 --> 00:01:18,085
très complexe, et pas si facile à déchiffrer.

16
00:01:18,085 --> 00:01:22,240
Maintenant, c'est ce que dans le monde node.js,

17
00:01:22,240 --> 00:01:25,830
ils appellent Callback Hell.

18
00:01:25,960 --> 00:01:30,845
Il y a eu plusieurs façons d'atténuer le problème qui se pose.

19
00:01:30,845 --> 00:01:35,690
Maintenant, vous pouvez complètement éviter cela en raison du fait

20
00:01:35,690 --> 00:01:38,300
que vous avez certaines opérations qui doivent être

21
00:01:38,300 --> 00:01:41,480
terminées avant que l'opération suivante puisse être lancée,

22
00:01:41,480 --> 00:01:47,765
mais nous pouvons réorganiser le code de manière à atténuer ce problème.

23
00:01:47,765 --> 00:01:52,080
Les promesses sont l'une de ces façons d'y remédier.

24
00:01:52,080 --> 00:01:56,015
Donc, pour résumer ce que nous venons de discuter, le

25
00:01:56,015 --> 00:01:59,435
code de rappel fortement imbriqué,

26
00:01:59,435 --> 00:02:02,990
provoque le problème de Callback Hell et il

27
00:02:02,990 --> 00:02:07,010
résulte de notre tendance à écrire des programmes de haut en bas.

28
00:02:07,010 --> 00:02:11,990
Nous sommes toujours raccrochés avec notre façon séquentielle d'écrire du code et

29
00:02:11,990 --> 00:02:17,420
nous voyons donc plus pratique d'écrire du code de haut en bas,

30
00:02:17,420 --> 00:02:21,145
et de le regarder comme s'il s'exécutait dans cet ordre.

31
00:02:21,145 --> 00:02:24,140
Maintenant, nous pouvons contourner le problème Callback Hell

32
00:02:24,140 --> 00:02:27,460
en n'utilisant pas de fonctions anonymes pour les rappels, mais en

33
00:02:27,460 --> 00:02:30,870
déclarant ces fonctions avec des noms spécifiques,

34
00:02:30,870 --> 00:02:35,630
puis en évitant la façon dont nous écrivons le code comme vous l'avez vu ici.

35
00:02:35,630 --> 00:02:41,190
C' est l'une des approches que les gens adoptent pour faire face au problème du Callback Hell.

36
00:02:41,190 --> 00:02:44,990
Plusieurs autres approches ont été suggérées,

37
00:02:44,990 --> 00:02:51,085
des liens vers quelques articles à cet égard sont fournis dans les ressources supplémentaires.

38
00:02:51,085 --> 00:02:53,720
Mais dans cette conférence,

39
00:02:53,720 --> 00:02:56,810
je vais me concentrer sur une approche particulière qui

40
00:02:56,810 --> 00:03:00,275
est utilisée pour traiter le problème de l'enfer de Callback, à

41
00:03:00,275 --> 00:03:02,370
savoir l'utilisation des promesses.

42
00:03:02,370 --> 00:03:07,345
Donc, nous pouvons utiliser des promesses pour apprivoiser le problème de l'enfer de Callback dans une certaine mesure.

43
00:03:07,345 --> 00:03:12,200
Nous allons voir comment les promesses nous aident à cet égard et dans

44
00:03:12,200 --> 00:03:17,180
l'exercice, nous verrons comment, parce que le pilote NODE-MONGO DB

45
00:03:17,180 --> 00:03:21,665
supporte déjà une interface proxy, nous pouvons tirer parti de cela

46
00:03:21,665 --> 00:03:27,495
pour réécrire notre code pour profiter du support promis dans le pilote MONGO DB.

47
00:03:27,495 --> 00:03:31,455
Résumer brièvement ce qu'est une promesse.

48
00:03:31,455 --> 00:03:35,625
Une promesse est un mécanisme qui prend en charge le calcul asynchrone.

49
00:03:35,625 --> 00:03:39,250
Donc, si vous avez beaucoup de travail à faire,

50
00:03:39,250 --> 00:03:43,550
la promesse agit comme un proxy pour une valeur qui

51
00:03:43,550 --> 00:03:48,100
n'est pas connue pour le moment mais la promesse vous est donnée.

52
00:03:48,100 --> 00:03:50,270
Mais lorsque la valeur sera disponible,

53
00:03:50,270 --> 00:03:53,225
elle sera disponible à l'avenir.

54
00:03:53,225 --> 00:03:56,690
Donc, la promesse représente un espace réservé pour cette valeur.

55
00:03:56,690 --> 00:03:58,795
Si la valeur aboutit correctement,

56
00:03:58,795 --> 00:04:02,240
alors votre promesse aboutit correctement et vous pouvez faire

57
00:04:02,240 --> 00:04:08,735
exécuter un morceau de code afin de gérer le fait que la promesse a été résolue correctement,

58
00:04:08,735 --> 00:04:12,950
sinon vous gérez l'erreur dans cette situation.

59
00:04:12,950 --> 00:04:20,060
Donc, une promesse se résoudra soit en résolution, soit en rejet de la promesse.

60
00:04:20,060 --> 00:04:23,515
Une promesse en attente peut soit résoudre

61
00:04:23,515 --> 00:04:27,105
lorsque la valeur est correctement obtenue, donc dans ce cas,

62
00:04:27,105 --> 00:04:31,755
elle sera résolue ou ce que nous appelons comme la réalisation de la promesse.

63
00:04:31,755 --> 00:04:33,540
Donc, lorsque la promesse est résolue,

64
00:04:33,540 --> 00:04:35,960
alors vous aurez un morceau de code qui

65
00:04:35,960 --> 00:04:38,760
gère le fait que la promesse a été résolue.

66
00:04:38,760 --> 00:04:40,455
Si la promesse est rejetée,

67
00:04:40,455 --> 00:04:43,985
vous devriez également gérer cette situation

68
00:04:43,985 --> 00:04:48,470
le rejet de la promesse en conséquence dans votre code.

69
00:04:48,470 --> 00:04:52,400
C' est donc la raison pour laquelle chaque fois que vous créez une promesse,

70
00:04:52,400 --> 00:04:56,680
vous ne fournissez que les options de résolution et de rejet de celle-ci.

71
00:04:56,680 --> 00:05:02,905
L' option de résolution est généralement gérée par le médecin puis option pour votre promesse.

72
00:05:02,905 --> 00:05:05,960
Alors pourquoi utilisons-nous des promesses ?

73
00:05:05,960 --> 00:05:08,060
Les promesses sont utilisées car il résout

74
00:05:08,060 --> 00:05:13,130
le problème de l'enfer de rappel dans une large mesure et les promesses peuvent être modifiées.

75
00:05:13,130 --> 00:05:15,860
Par exemple, si vous avez une promesse qui à

76
00:05:15,860 --> 00:05:20,690
son tour déclenche un appel à une autre qui retournera une promesse.

77
00:05:20,690 --> 00:05:26,525
La gestion de la promesse peut être changée à la poignée de la promesse précédente.

78
00:05:26,525 --> 00:05:28,315
Ainsi, vous pouvez avoir un tas de,

79
00:05:28,315 --> 00:05:33,635
puis des appels qui géreront le retour de la valeur.

80
00:05:33,635 --> 00:05:39,930
Maintenant, nous allons voir l'utilisation de cela dans l'exercice qui suit cette conférence.

81
00:05:39,930 --> 00:05:42,275
Pour consommer une promesse,

82
00:05:42,275 --> 00:05:47,675
vous devez enregistrer une fonction de rappel appropriée

83
00:05:47,675 --> 00:05:50,810
lorsque le consommateur d'une promesse est informé

84
00:05:50,810 --> 00:05:53,750
de l'exécution ou du rejet de la promesse.

85
00:05:53,750 --> 00:05:59,860
Donc, les rappels sont enregistrés via .then () à la promesse.

86
00:05:59,860 --> 00:06:07,040
Vous utiliserez le fichier .catch () pour attraper les erreurs dans la promesse de retour.

87
00:06:07,040 --> 00:06:09,845
Maintenant, les méthodes .then () peuvent être enchaînées

88
00:06:09,845 --> 00:06:15,205
ensemble comme vous le verrez dans l'exercice qui suit.

89
00:06:15,205 --> 00:06:19,730
Par exemple, vous géreriez normalement une promesse en

90
00:06:19,730 --> 00:06:26,250
chaînant les .then () et .catch () à la valeur de promesse.