1
00:00:03,980 --> 00:00:08,700
Мы только что узнали о Callback Hell и о том,

2
00:00:08,700 --> 00:00:13,455
как обещания могут помочь нам преодолеть эту проблему.

3
00:00:13,455 --> 00:00:19,575
Мы знаем, что драйвер узла MongoDB изначально поддерживает обещания.

4
00:00:19,575 --> 00:00:22,485
Таким образом, если вы не укажете обратный вызов,

5
00:00:22,485 --> 00:00:26,385
вызовы их функций вернут обещания.

6
00:00:26,385 --> 00:00:31,445
Итак, мы собираемся обновить наше приложение, чтобы использовать обещания, чтобы

7
00:00:31,445 --> 00:00:38,005
избежать проблемы обратного вызова, о которой мы только что узнали в предыдущей лекции.

8
00:00:38,005 --> 00:00:40,644
Возвращаясь к нашему приложению,

9
00:00:40,644 --> 00:00:48,035
снова взглянув на причину обратного вызова в нашем коде.

10
00:00:48,035 --> 00:00:52,520
Обратите внимание, что здесь, когда

11
00:00:52,520 --> 00:00:56,899
мы реализовали операции, у нас есть одна операция, а

12
00:00:56,899 --> 00:01:00,770
затем внутри обратного вызова этой операции, тогда нам нужно инициировать следующую операцию и внутри

13
00:01:00,770 --> 00:01:04,910
обратного вызова этой операции мы инициируем следующую операцию и так далее.

14
00:01:04,910 --> 00:01:10,040
Таким образом, вы заканчиваете этой пирамидой, как структура здесь.

15
00:01:10,040 --> 00:01:14,290
Одна операция внутри обратного вызова другого и внутри обратного вызова.

16
00:01:14,290 --> 00:01:21,240
Теперь этот код довольно скоро станет громоздким и сложным для понимания.

17
00:01:21,240 --> 00:01:24,760
Вот почему мы хотим преобразовать этот код, используя

18
00:01:24,760 --> 00:01:29,380
поддержку обещаний, которые Mongo DB Driver уже предоставляет

19
00:01:29,380 --> 00:01:33,205
для нас, чтобы мы могли вместо этого использовать обещания,

20
00:01:33,205 --> 00:01:37,735
а не использовать функции обратного вызова, как мы делали в этом упражнении.

21
00:01:37,735 --> 00:01:42,760
Конечно, я сделал предыдущую версию, чтобы проиллюстрировать вам, как мы можем

22
00:01:42,760 --> 00:01:48,595
приземлиться с обратным вызовом ад и как мы можем использовать обещания, чтобы преодолеть эту проблему.

23
00:01:48,595 --> 00:01:53,560
Итак, прежде чем мы обновим файл index.js,

24
00:01:53,560 --> 00:01:59,989
позвольте мне перейти в operations.jsfile, а затем мы сначала обновим это.

25
00:01:59,989 --> 00:02:06,950
Итак, здесь вы заметите, что когда мы вызываем эту функцию здесь,

26
00:02:06,950 --> 00:02:14,630
мы передаем второй параметр, который является функцией обратного вызова здесь.

27
00:02:14,630 --> 00:02:18,210
Так что, потому что мы будем использовать обещания здесь.

28
00:02:18,210 --> 00:02:21,545
Поэтому я просто удалю эту функцию обратного вызова, а затем,

29
00:02:21,545 --> 00:02:25,744
поскольку этот вызов вставки будет в любом случае возвращать обещания,

30
00:02:25,744 --> 00:02:29,710
я просто собираюсь вернуть обещание из этой функции.

31
00:02:29,710 --> 00:02:33,605
Итак, обратите внимание, как код был упрощен.

32
00:02:33,605 --> 00:02:36,090
Аналогично для второго

33
00:02:36,090 --> 00:02:42,740
я просто удалю эту функцию обратного вызова, а

34
00:02:42,740 --> 00:02:47,900
затем верну обещание,

35
00:02:47,900 --> 00:02:55,580
которое возвращается этим, а затем мы будем обрабатывать это в коде в index.js.

36
00:02:55,580 --> 00:02:58,495
Аналогично для удаления также

37
00:02:58,495 --> 00:03:08,280
я собираюсь удалить обратный вызов, а затем вернуть этот сбой, а также для uptade.

38
00:03:10,600 --> 00:03:16,730
Для обновления мы собираемся удалить обратный вызов, который мы дали

39
00:03:16,730 --> 00:03:22,564
здесь, а затем вернуть обещание.

40
00:03:22,564 --> 00:03:25,100
Таким образом, все эти четыре функции

41
00:03:25,100 --> 00:03:27,575
будут возвращать обещание, которое уже возвращено

42
00:03:27,575 --> 00:03:33,110
этими вызовами функций драйвера MongoDB.

43
00:03:33,110 --> 00:03:34,760
Теперь, как только мы закончим это,

44
00:03:34,760 --> 00:03:38,210
давайте вернемся к index.js.

45
00:03:38,210 --> 00:03:44,090
В index.js я собираюсь снова обновить эту функцию здесь.

46
00:03:44,090 --> 00:03:53,105
Таким образом, использование обещаний скажет MongoClient.connect (url), а затем

47
00:03:53,105 --> 00:04:03,470
мы заменим это, сказав «тогда», и это получает только db в качестве своего параметра.

48
00:04:03,470 --> 00:04:10,390
И внутри здесь, мы будем обрабатывать остальное, а также

49
00:04:10,390 --> 00:04:18,350
мы можем заметить, что эта конкретная функция закрывает «Тогда» здесь и

50
00:04:18,350 --> 00:04:20,505
обещание, вторая часть обещания,

51
00:04:20,505 --> 00:04:22,845
мы можем справиться с ошибкой.

52
00:04:22,845 --> 00:04:28,055
Можно сказать Consolelog.

53
00:04:28,055 --> 00:04:33,755
Таким образом, мы можем использовать уловы обещания также, чтобы поймать ошибки.

54
00:04:33,755 --> 00:04:36,275
Таким образом, мы поймали ошибки.

55
00:04:36,275 --> 00:04:39,815
Теперь давайте улучшим код внутри.

56
00:04:39,815 --> 00:04:45,530
Поэтому внутри здесь мы делаем документ вставки операции БД,

57
00:04:45,530 --> 00:04:49,685
и вместо вызова этой функции здесь

58
00:04:49,685 --> 00:04:59,115
я собираюсь сделать это превратить это в «тогда» здесь.

59
00:04:59,115 --> 00:05:06,870
Так что я собираюсь закрыть это и сказать. Тогда результат.

60
00:05:06,870 --> 00:05:08,800
Поэтому внутри этого результата

61
00:05:08,800 --> 00:05:11,600
мы собираемся распечатать журнал консоли, а затем.

62
00:05:11,600 --> 00:05:20,630
Так что я собираюсь закрыть это здесь, а затем мы

63
00:05:20,630 --> 00:05:25,505
закроем «тогда» здесь, а затем

64
00:05:25,505 --> 00:05:31,950
это будет прикреплено к снова «тогда» здесь.

65
00:05:32,600 --> 00:05:36,640
Итак, вы видите, что я цепляю два «thens»

66
00:05:36,640 --> 00:05:40,070
один в другой здесь, а затем внутри нас, тогда

67
00:05:40,070 --> 00:05:47,570
мы сделаем консольный журнал, а затем сделаем возврат следующей операции.

68
00:05:47,570 --> 00:05:51,390
Но затем, для этой операции,

69
00:05:52,540 --> 00:06:02,070
я собираюсь закрыть это и закрыть это

70
00:06:02,070 --> 00:06:06,920
тогда, а затем этот вызов снова будет

71
00:06:06,920 --> 00:06:13,320
обрабатываться внутри функции «then» здесь.

72
00:06:13,460 --> 00:06:20,510
Поэтому обратите внимание, как у вас есть первая функция, и в «тогда» мы вызываем

73
00:06:20,510 --> 00:06:27,870
документы dboper find, и это вернет обещание.

74
00:06:27,870 --> 00:06:30,410
Это обещание будет выполнено этим тогда.

75
00:06:30,410 --> 00:06:35,720
Итак, мы цепим две вещи вместе, а затем снова приковываем еще одно «потом» здесь.

76
00:06:35,720 --> 00:06:47,005
Позвольте мне изобрести код здесь, а затем мы вернем это здесь, и

77
00:06:47,005 --> 00:06:57,610
это снова закроет и

78
00:06:57,610 --> 00:07:07,850
закроет, что «тогда», а затем это

79
00:07:07,850 --> 00:07:13,280
будет заключено внутри следующего «тогда», и мы назовем следующую функцию здесь «что

80
00:07:13,280 --> 00:07:21,130
db.dropCollection («Блюда» и закрыть «это то» и следующий здесь.

81
00:07:26,660 --> 00:07:31,390
Мы будем обрабатывать «тогда» результата здесь.

82
00:07:39,650 --> 00:07:48,690
Верните dbclose, и все

83
00:07:48,690 --> 00:07:56,785
это здесь теперь можно удалить, потому что они больше не нужны.

84
00:07:56,785 --> 00:08:04,520
И тогда, наконец, если есть ошибка, поймает ошибку этой функции.

85
00:08:04,520 --> 00:08:12,930
Поэтому я просто скопирую это, а затем вставьте его здесь. Вот оно.

86
00:08:12,930 --> 00:08:14,755
С этим изменением теперь

87
00:08:14,755 --> 00:08:20,220
ваш код намного проще обрабатывать здесь.

88
00:08:20,220 --> 00:08:21,510
Таким образом, как вы можете видеть,

89
00:08:21,510 --> 00:08:24,560
у вас есть MongoClient.Connect, который

90
00:08:24,560 --> 00:08:28,040
возвращает обещание и внутри обработки этого обещания,

91
00:08:28,040 --> 00:08:31,700
они вызывают эти методы, и один за другим они

92
00:08:31,700 --> 00:08:35,490
возвращают обещание, а затем вы связываете их с помощью.

93
00:08:35,490 --> 00:08:41,635
Эта структура аккордов гораздо легче следовать, чем то, что мы реализовали ранее.

94
00:08:41,635 --> 00:08:46,280
Таким образом, используя обещания, мы буквально перевернули его, а затем избежали

95
00:08:46,280 --> 00:08:51,250
обратного ада, который мы видели в более ранней версии этого приложения.

96
00:08:51,250 --> 00:08:53,590
Итак, давайте сохраним изменения как

97
00:08:53,590 --> 00:08:58,715
index.jsn.operation.js, а затем взглянем на это приложение.

98
00:08:58,715 --> 00:09:00,840
Опять же, перейдя

99
00:09:00,840 --> 00:09:03,105
на терминал, в командной строке введите «npm

100
00:09:03,105 --> 00:09:09,515
start», и вы увидите, что ваше приложение работает точно так, как раньше

101
00:09:09,515 --> 00:09:12,200
, оно вставляет документ, находит

102
00:09:12,200 --> 00:09:15,080
документ, обновляет документ, а затем находит

103
00:09:15,080 --> 00:09:18,530
обновленный документ, а затем закрывает базу данных акта.

104
00:09:18,530 --> 00:09:23,630
Таким образом, используя обещания, мы реструктурировали код, чтобы быть намного проще и

105
00:09:23,630 --> 00:09:29,945
избежать обратного ада, который мы видели в предыдущей версии этого приложения.

106
00:09:29,945 --> 00:09:33,705
С этим мы завершаем это упражнение.

107
00:09:33,705 --> 00:09:36,470
В этом упражнении вы видели, как мы можем использовать

108
00:09:36,470 --> 00:09:39,590
обещания, чтобы избежать обратного ада.

109
00:09:39,590 --> 00:09:42,920
Это хорошее время для вас, чтобы сделать git фиксацию с

110
00:09:42,920 --> 00:09:47,950
обратным вызовом сообщения ад и обещание.