1
00:00:03,980 --> 00:00:08,700
Chúng ta vừa học được về Callback Hell và

2
00:00:08,700 --> 00:00:13,455
cách hứa hẹn có thể giúp chúng ta vượt qua vấn đề này.

3
00:00:13,455 --> 00:00:19,575
Chúng tôi biết rằng trình điều khiển MongoDB nút bản thân hỗ trợ lời hứa.

4
00:00:19,575 --> 00:00:22,485
Vì vậy, nếu bạn không chỉ định một callback,

5
00:00:22,485 --> 00:00:26,385
các cuộc gọi đến các chức năng của họ sẽ trả lại lời hứa.

6
00:00:26,385 --> 00:00:31,445
Vì vậy, chúng tôi sẽ cập nhật ứng dụng của chúng tôi để sử dụng các lời hứa để

7
00:00:31,445 --> 00:00:38,005
tránh vấn đề địa ngục gọi lại mà chúng tôi vừa học được trong bài giảng trước đó.

8
00:00:38,005 --> 00:00:40,644
Quay trở lại ứng dụng của chúng tôi,

9
00:00:40,644 --> 00:00:48,035
một lần nữa tham gia thêm một cái nhìn vào lý do địa ngục gọi lại đã phát triển trong mã của chúng tôi.

10
00:00:48,035 --> 00:00:52,520
Lưu ý rằng ở đây khi chúng tôi thực hiện các hoạt động,

11
00:00:52,520 --> 00:00:56,899
chúng tôi có một hoạt động và sau đó bên trong callback của hoạt động

12
00:00:56,899 --> 00:01:00,770
đó, sau đó chúng tôi cần phải bắt đầu các hoạt động tiếp theo và bên trong

13
00:01:00,770 --> 00:01:04,910
callback của hoạt động đó chúng tôi đang bắt đầu các hoạt động tiếp theo và như vậy.

14
00:01:04,910 --> 00:01:10,040
Vì vậy, bạn sẽ kết thúc với kim tự tháp này giống như cấu trúc ở đây.

15
00:01:10,040 --> 00:01:14,290
Một hoạt động bên trong callback của người khác và bên trong callback.

16
00:01:14,290 --> 00:01:21,240
Bây giờ, mã này sẽ sớm trở nên khó khăn và phức tạp để hiểu.

17
00:01:21,240 --> 00:01:24,760
Vì vậy, đó là lý do tại sao chúng tôi muốn chuyển đổi mã này bằng cách sử dụng

18
00:01:24,760 --> 00:01:29,380
lời hứa hỗ trợ mà Mongo DB Driver đã cung cấp

19
00:01:29,380 --> 00:01:33,205
cho chúng tôi để thay vào đó chúng tôi có thể sử dụng lời hứa

20
00:01:33,205 --> 00:01:37,735
chứ không phải là sử dụng các chức năng gọi lại như chúng tôi đã làm trong bài tập này.

21
00:01:37,735 --> 00:01:42,760
Tất nhiên, tôi đã làm phiên bản trước đó chỉ để minh họa cho bạn làm thế nào chúng ta có thể

22
00:01:42,760 --> 00:01:48,595
hạ cánh với địa ngục gọi lại và làm thế nào chúng ta có thể sử dụng lời hứa để khắc phục vấn đề này.

23
00:01:48,595 --> 00:01:53,560
Vì vậy, trước khi chúng tôi cập nhật các tập tin index.js,

24
00:01:53,560 --> 00:01:59,989
hãy để tôi đi vào operations.jsfile và sau đó chúng tôi sẽ cập nhật này đầu tiên.

25
00:01:59,989 --> 00:02:06,950
Vì vậy, trong đây, bạn sẽ nhận thấy rằng khi chúng ta đang gọi hàm này ở đây,

26
00:02:06,950 --> 00:02:14,630
chúng ta đang đi qua trong tham số thứ hai đó là một hàm callback ở đây.

27
00:02:14,630 --> 00:02:18,210
Vì vậy, bởi vì chúng ta sẽ sử dụng những lời hứa ở đây.

28
00:02:18,210 --> 00:02:21,545
Vì vậy, tôi chỉ cần xóa chức năng gọi lại và sau đó

29
00:02:21,545 --> 00:02:25,744
kể từ khi cuộc gọi này để chèn sẽ trả lại lời hứa,

30
00:02:25,744 --> 00:02:29,710
tôi chỉ sẽ trả lại lời hứa từ chức năng này.

31
00:02:29,710 --> 00:02:33,605
Vì vậy, lưu ý làm thế nào mã đã được đơn giản hóa.

32
00:02:33,605 --> 00:02:36,090
Tương tự như vậy cho thứ hai,

33
00:02:36,090 --> 00:02:42,740
tôi sẽ chỉ đơn giản là loại bỏ chức năng gọi lại này và

34
00:02:42,740 --> 00:02:47,900
sau đó trả về lời hứa

35
00:02:47,900 --> 00:02:55,580
đang được trả lại bởi điều này và sau đó chúng tôi sẽ xử lý điều đó trong mã trong index.js.

36
00:02:55,580 --> 00:02:58,495
Tương tự như vậy cho một xóa cũng,

37
00:02:58,495 --> 00:03:08,280
tôi sẽ loại bỏ các callback và sau đó trả lại rằng tai nạn và cũng cho uptade.

38
00:03:10,600 --> 00:03:16,730
Để cập nhật, chúng tôi sẽ loại bỏ các callback mà chúng tôi đã đưa ra

39
00:03:16,730 --> 00:03:22,564
ở đây và sau đó trả lại lời hứa.

40
00:03:22,564 --> 00:03:25,100
Vì vậy, theo cách này tất cả bốn chức năng sẽ

41
00:03:25,100 --> 00:03:27,575
được trả về lời hứa mà đã được trả về

42
00:03:27,575 --> 00:03:33,110
bởi các cuộc gọi đến các chức năng điều khiển MongoDB.

43
00:03:33,110 --> 00:03:34,760
Bây giờ một khi chúng tôi đã hoàn thành điều đó, chúng

44
00:03:34,760 --> 00:03:38,210
ta hãy quay trở lại index.js.

45
00:03:38,210 --> 00:03:44,090
Trong index.js, tôi sẽ cập nhật lại chức năng này ở đây.

46
00:03:44,090 --> 00:03:53,105
Vì vậy, sử dụng lời hứa sẽ nói MongoClient.connect (url) và sau đó

47
00:03:53,105 --> 00:04:03,470
chúng tôi sẽ thay thế điều này bằng cách nói “sau đó” và điều này chỉ nhận được db như tham số của họ.

48
00:04:03,470 --> 00:04:10,390
Và bên trong đây, chúng tôi sẽ xử lý phần còn lại và chúng tôi cũng có thể

49
00:04:10,390 --> 00:04:18,350
làm nhận thấy rằng chức năng đặc biệt này đóng “Sau đó” ở đây và lời hứa,

50
00:04:18,350 --> 00:04:20,505
phần thứ hai để lời hứa,

51
00:04:20,505 --> 00:04:22,845
chúng tôi có thể xử lý các lỗi.

52
00:04:22,845 --> 00:04:28,055
Chúng ta có thể nói consolelog.

53
00:04:28,055 --> 00:04:33,755
Vì vậy, chúng ta có thể sử dụng các bắt của lời hứa cũng để bắt các lỗi.

54
00:04:33,755 --> 00:04:36,275
Vì vậy, theo cách đó, chúng tôi đã bắt gặp các lỗi.

55
00:04:36,275 --> 00:04:39,815
Bây giờ, chúng ta hãy cải thiện mã bên trong đây.

56
00:04:39,815 --> 00:04:45,530
Vì vậy, bên trong đây chúng tôi đang làm DB hoạt động chèn tài liệu,

57
00:04:45,530 --> 00:04:49,685
và thay vì gọi chức năng này ở đây,

58
00:04:49,685 --> 00:04:59,115
những gì tôi sẽ làm là biến điều này thành “sau đó” ở đây.

59
00:04:59,115 --> 00:05:06,870
Vì vậy, tôi sẽ đóng cửa điều này và nói.then kết quả.

60
00:05:06,870 --> 00:05:08,800
Vì vậy, bên trong những kết quả,

61
00:05:08,800 --> 00:05:11,600
chúng tôi sẽ in ra các bản ghi giao diện điều khiển và sau đó.

62
00:05:11,600 --> 00:05:20,630
Vì vậy, tôi sẽ đóng cửa này ra ở đây và sau đó chúng tôi sẽ

63
00:05:20,630 --> 00:05:25,505
đóng “sau đó” ở đây và sau đó

64
00:05:25,505 --> 00:05:31,950
điều này sẽ được gắn vào một lần nữa một “sau đó” ở đây.

65
00:05:32,600 --> 00:05:36,640
Vì vậy, bạn thấy rằng tôi đang chuỗi hai “thens”

66
00:05:36,640 --> 00:05:40,070
một vào khác ở đây và sau đó bên trong chúng tôi sau đó,

67
00:05:40,070 --> 00:05:47,570
chúng tôi sẽ làm một bản ghi giao diện điều khiển và sau đó chúng tôi sẽ làm một trở lại của các hoạt động tiếp theo.

68
00:05:47,570 --> 00:05:51,390
Nhưng sau đó, cho hoạt động này,

69
00:05:52,540 --> 00:06:02,070
tôi sẽ đóng cửa này và đóng này

70
00:06:02,070 --> 00:06:06,920
sau đó và sau đó cuộc gọi này trở lại một lần nữa bây giờ sẽ

71
00:06:06,920 --> 00:06:13,320
được xử lý bên trong một chức năng “sau đó” ở đây.

72
00:06:13,460 --> 00:06:20,510
Vì vậy, lưu ý làm thế nào bạn có chức năng đầu tiên và trong “sau đó” chúng tôi đang gọi

73
00:06:20,510 --> 00:06:27,870
các tài liệu tìm dboper và đó sẽ trở lại và điều này sẽ trả lại một lời hứa.

74
00:06:27,870 --> 00:06:30,410
Lời hứa đó sẽ được xử lý bởi điều này sau đó.

75
00:06:30,410 --> 00:06:35,720
Vì vậy, chúng tôi đang xích hai thens với nhau và sau đó một lần nữa xích lại một “sau đó” ở đây.

76
00:06:35,720 --> 00:06:47,005
Hãy để tôi phát minh lại mã ở đây và sau đó chúng tôi sẽ trả lại điều này ở đây và

77
00:06:47,005 --> 00:06:57,610
điều này một lần nữa sẽ đóng lại và

78
00:06:57,610 --> 00:07:07,850
đóng “sau đó” và sau đó điều này được kèm theo bên trong tiếp theo “sau đó” và chúng tôi

79
00:07:07,850 --> 00:07:13,280
sẽ gọi chức năng tiếp theo ở đây “rằng

80
00:07:13,280 --> 00:07:21,130
DB.dropCollection ('Món ăn' và đóng “này sau đó” và tiếp theo ở đây.

81
00:07:26,660 --> 00:07:31,390
Chúng tôi sẽ xử lý “sau đó” của kết quả ở đây.

82
00:07:39,650 --> 00:07:48,690
Quay trở lại dbclose và tất cả

83
00:07:48,690 --> 00:07:56,785
những ở đây bây giờ có thể được gỡ bỏ bởi vì họ không còn cần thiết.

84
00:07:56,785 --> 00:08:04,520
Và sau đó cuối cùng nếu có một lỗi sẽ bắt lỗi chức năng này.

85
00:08:04,520 --> 00:08:12,930
Vì vậy, tôi sẽ chỉ sao chép này và sau đó dán nó ở đây. Đó là nó.

86
00:08:12,930 --> 00:08:14,755
Với sự thay đổi này bây giờ,

87
00:08:14,755 --> 00:08:20,220
mã của bạn là dễ dàng hơn rất nhiều để xử lý ở đây.

88
00:08:20,220 --> 00:08:21,510
Vì vậy, như bạn có thể thấy,

89
00:08:21,510 --> 00:08:24,560
bạn có MongoClient.Connect

90
00:08:24,560 --> 00:08:28,040
trả về một lời hứa và bên trong việc xử lý lời hứa đó,

91
00:08:28,040 --> 00:08:31,700
họ đang gọi các phương pháp này và cái khác họ đang

92
00:08:31,700 --> 00:08:35,490
mỗi trả về lời hứa và sau đó bạn đang chuỗi chúng bằng cách sử dụng các.

93
00:08:35,490 --> 00:08:41,635
Cấu trúc hợp âm này dễ theo dõi hơn rất nhiều so với những gì chúng tôi đã thực hiện trước đó.

94
00:08:41,635 --> 00:08:46,280
Vì vậy, sử dụng lời hứa chúng tôi đã theo nghĩa đen biến nó xung quanh và sau đó tránh

95
00:08:46,280 --> 00:08:51,250
địa ngục gọi lại mà chúng tôi đã thấy trong phiên bản trước của ứng dụng này.

96
00:08:51,250 --> 00:08:53,590
Vì vậy, chúng ta hãy lưu các thay đổi cho cả

97
00:08:53,590 --> 00:08:58,715
index.jsn.operation.js và sau đó có một cái nhìn vào ứng dụng này.

98
00:08:58,715 --> 00:09:00,840
Một lần nữa đi đến thiết bị đầu cuối,

99
00:09:00,840 --> 00:09:03,105
tại dấu nhắc gõ “npm

100
00:09:03,105 --> 00:09:09,515
start” và bạn sẽ thấy rằng ứng dụng của bạn chạy chính xác như trước,

101
00:09:09,515 --> 00:09:12,200
nó chèn tài liệu, tìm tài liệu,

102
00:09:12,200 --> 00:09:15,080
cập nhật tài liệu và sau đó tìm

103
00:09:15,080 --> 00:09:18,530
tài liệu cập nhật và sau đó đóng cơ sở dữ liệu của hành động.

104
00:09:18,530 --> 00:09:23,630
Vì vậy, sử dụng lời hứa chúng tôi đã tái cấu trúc mã để được dễ dàng hơn rất nhiều và

105
00:09:23,630 --> 00:09:29,945
tránh địa ngục gọi lại mà chúng tôi đã thấy trong phiên bản trước của ứng dụng này.

106
00:09:29,945 --> 00:09:33,705
Với điều này, chúng tôi hoàn thành bài tập này.

107
00:09:33,705 --> 00:09:36,470
Trong bài tập này, bạn đã thấy làm thế nào chúng ta có thể sử

108
00:09:36,470 --> 00:09:39,590
dụng những lời hứa để tránh địa ngục gọi lại.

109
00:09:39,590 --> 00:09:42,920
Đây là thời điểm tốt để bạn thực hiện một cam kết git với

110
00:09:42,920 --> 00:09:47,950
địa ngục gọi lại tin nhắn và hứa hẹn.