1
00:00:03,920 --> 00:00:08,675
Trong bài giảng này và bài tập sau,

2
00:00:08,675 --> 00:00:12,000
chúng ta sẽ nói cụ thể về Callback Hell.

3
00:00:12,000 --> 00:00:15,330
Vấn đề phát sinh khi bạn viết

4
00:00:15,330 --> 00:00:19,980
callbacks trong nút và đặc biệt là lồng nhau callbacks và node.

5
00:00:19,980 --> 00:00:26,795
Chúng ta cũng sẽ xem xét những lời hứa như một cách để giải quyết vấn đề Callback Hell.

6
00:00:26,795 --> 00:00:34,340
Để cung cấp cho bạn một ý tưởng về những gì các vấn đề Callback Hell điển hình sẽ dẫn

7
00:00:34,340 --> 00:00:40,115
đến, hãy xem lại các tập tin index.js từ bài tập trước đó.

8
00:00:40,115 --> 00:00:44,020
Như tôi đã nói về nó trong bài tập trước,

9
00:00:44,020 --> 00:00:47,959
bạn nhận thấy rằng đối với mỗi hoạt động mà chúng tôi thực hiện, các

10
00:00:47,959 --> 00:00:53,990
hoạt động tiếp theo được bao gồm bên trong chức năng gọi lại ở đây

11
00:00:53,990 --> 00:01:00,320
và như vậy cho đến khi bạn tạo thành một kim tự tháp như cấu trúc đi một lần nữa.

12
00:01:00,320 --> 00:01:06,160
Vì vậy, bạn thấy kim tự tháp này giống như cấu trúc phát sinh trong mã của bạn.

13
00:01:06,160 --> 00:01:11,540
Bây giờ hãy tưởng tượng rằng bạn cần phải thực hiện nhiều hoạt động lồng nhau như thế này,

14
00:01:11,540 --> 00:01:13,850
mã của bạn sẽ trở nên khá sớm

15
00:01:13,850 --> 00:01:18,085
, rất phức tạp, và không dễ dàng để giải mã.

16
00:01:18,085 --> 00:01:22,240
Bây giờ đây là những gì trong thế giới node.js,

17
00:01:22,240 --> 00:01:25,830
họ đề cập đến như là Callback Hell.

18
00:01:25,960 --> 00:01:30,845
Đã có một số cách để giảm nhẹ vấn đề phát sinh.

19
00:01:30,845 --> 00:01:35,690
Bây giờ bạn hoàn toàn có thể tránh được điều này vì thực

20
00:01:35,690 --> 00:01:38,300
tế là bạn có

21
00:01:41,480 --> 00:01:47,765
một số thao tác cần phải hoàn thành trước khi thao tác tiếp theo có thể được bắt đầu, nhưng chúng ta có thể sắp xếp lại mã theo cách để giảm thiểu vấn đề này.

22
00:01:47,765 --> 00:01:52,080
Hứa hẹn là một cách để giải quyết vấn đề này.

23
00:01:52,080 --> 00:01:56,015
Vì vậy, để tóm tắt những gì chúng tôi vừa thảo luận,

24
00:01:56,015 --> 00:01:59,435
nhiều lồng nhau mã callback,

25
00:01:59,435 --> 00:02:02,990
gây ra vấn đề Callback Hell và nó

26
00:02:02,990 --> 00:02:07,010
kết quả từ xu hướng của chúng tôi để viết các chương trình từ trên xuống.

27
00:02:07,010 --> 00:02:11,990
Chúng tôi vẫn còn treo lên với cách viết mã tuần tự của chúng tôi và

28
00:02:11,990 --> 00:02:17,420
vì vậy chúng tôi thấy nó thuận tiện hơn để viết mã từ trên xuống dưới,

29
00:02:17,420 --> 00:02:21,145
và nhìn vào nó như thể nó đang thực hiện theo thứ tự đó.

30
00:02:21,145 --> 00:02:24,140
Bây giờ chúng ta có thể làm việc xung quanh vấn đề Callback Hell bằng cách

31
00:02:24,140 --> 00:02:27,460
không sử dụng hàm ẩn danh cho các callbacks mà thay vào

32
00:02:27,460 --> 00:02:30,870
đó, khai báo

33
00:02:30,870 --> 00:02:35,630
các hàm đó với tên cụ thể, và sau đó tránh cách chúng ta viết mã như bạn thấy ở đây.

34
00:02:35,630 --> 00:02:41,190
Đó là một trong những cách tiếp cận mà mọi người thực hiện để đối phó với vấn đề Callback Hell.

35
00:02:41,190 --> 00:02:44,990
Có một số cách tiếp cận khác đã được đề xuất,

36
00:02:44,990 --> 00:02:51,085
liên kết đến một vài bài viết về vấn đề này được cung cấp trong các tài nguyên bổ sung.

37
00:02:51,085 --> 00:02:53,720
Nhưng trong bài giảng đặc biệt này,

38
00:02:53,720 --> 00:02:56,810
tôi sẽ tập trung vào một cách tiếp cận cụ thể

39
00:02:56,810 --> 00:03:00,275
được sử dụng để giải quyết vấn đề Callback Hell,

40
00:03:00,275 --> 00:03:02,370
đó là việc sử dụng các lời hứa.

41
00:03:02,370 --> 00:03:07,345
Vì vậy, chúng ta có thể sử dụng lời hứa để chế ngự bài toán Callback Hell ở một mức độ khá lớn.

42
00:03:07,345 --> 00:03:12,200
Chúng tôi sẽ xem xét cách hứa hẹn giúp chúng tôi trong vấn đề này và trong

43
00:03:12,200 --> 00:03:17,180
bài tập chúng tôi sẽ thấy như thế nào bởi vì trình điều khiển NODE-MONGO DB đã

44
00:03:17,180 --> 00:03:21,665
hỗ trợ một giao diện proxy, chúng tôi có thể tận dụng nó để viết lại mã của chúng tôi

45
00:03:21,665 --> 00:03:27,495
để tận dụng lợi thế của lời hứa hỗ trợ trong trình điều khiển MONGO DB.

46
00:03:27,495 --> 00:03:31,455
Tóm tắt ngắn gọn những gì một lời hứa là.

47
00:03:31,455 --> 00:03:35,625
Một lời hứa là một cơ chế hỗ trợ tính toán không đồng bộ.

48
00:03:35,625 --> 00:03:39,250
Vì vậy, nếu bạn có số lượng công việc cần phải được thực hiện,

49
00:03:39,250 --> 00:03:43,550
lời hứa đóng vai trò như một proxy cho một giá trị mà

50
00:03:43,550 --> 00:03:48,100
không được biết đến tại thời điểm này nhưng lời hứa được trao cho bạn.

51
00:03:48,100 --> 00:03:50,270
Nhưng khi giá trị trở nên có sẵn,

52
00:03:50,270 --> 00:03:53,225
nó sẽ có sẵn trong tương lai.

53
00:03:53,225 --> 00:03:56,690
Vì vậy, lời hứa đại diện cho một giữ chỗ cho giá trị đó.

54
00:03:56,690 --> 00:03:58,795
Nếu giá trị kết quả chính xác,

55
00:03:58,795 --> 00:04:02,240
sau đó lời hứa của bạn kết quả chính xác và bạn có thể có

56
00:04:02,240 --> 00:04:08,735
một đoạn mã thực thi để xử lý thực tế là lời hứa được giải quyết một cách chính xác,

57
00:04:08,735 --> 00:04:12,950
nếu không thì bạn xử lý lỗi trong tình huống đó.

58
00:04:12,950 --> 00:04:20,060
Vì vậy, một lời hứa sẽ giải quyết hoặc là quyết tâm hoặc từ chối lời hứa.

59
00:04:20,060 --> 00:04:23,515
Một lời hứa đang chờ xử lý có thể giải quyết

60
00:04:23,515 --> 00:04:27,105
khi giá trị được thu được một cách chính xác như vậy trong trường hợp đó,

61
00:04:27,105 --> 00:04:31,755
nó sẽ giải quyết hoặc những gì chúng tôi gọi là hoàn thành lời hứa.

62
00:04:31,755 --> 00:04:33,540
Vì vậy, khi lời hứa được giải quyết,

63
00:04:33,540 --> 00:04:35,960
sau đó bạn sẽ có một đoạn mã

64
00:04:35,960 --> 00:04:38,760
xử lý thực tế là lời hứa đã được giải quyết.

65
00:04:38,760 --> 00:04:40,455
Nếu lời hứa bị từ chối,

66
00:04:40,455 --> 00:04:43,985
bạn cũng nên xử lý tình huống đó

67
00:04:43,985 --> 00:04:48,470
từ chối lời hứa tương ứng trong mã của bạn.

68
00:04:48,470 --> 00:04:52,400
Vì vậy, đó là lý do bất cứ khi nào bạn tạo ra một lời hứa,

69
00:04:52,400 --> 00:04:56,680
bạn chỉ cung cấp quyết tâm và các lựa chọn từ chối từ nó.

70
00:04:56,680 --> 00:05:02,905
Các tùy chọn giải quyết thường được xử lý bởi bác sĩ sau đó lựa chọn cho lời hứa của bạn.

71
00:05:02,905 --> 00:05:05,960
Vậy tại sao chúng ta lại sử dụng lời hứa?

72
00:05:05,960 --> 00:05:08,060
Lời hứa được sử dụng bởi vì nó

73
00:05:08,060 --> 00:05:13,130
giải quyết vấn đề địa ngục gọi lại đến một mức độ lớn và lời hứa có thể được thay đổi.

74
00:05:13,130 --> 00:05:15,860
Ví dụ, nếu bạn có một lời hứa mà

75
00:05:15,860 --> 00:05:20,690
lần lượt kích hoạt một cuộc gọi đến một lời hứa khác mà sẽ trả lại một lời hứa.

76
00:05:20,690 --> 00:05:26,525
Việc xử lý lời hứa có thể được thay đổi thành tay cầm của lời hứa trước đó.

77
00:05:26,525 --> 00:05:28,315
Vì vậy, bạn có thể có một loạt các,

78
00:05:28,315 --> 00:05:33,635
sau đó các cuộc gọi sẽ xử lý sự trở lại của giá trị.

79
00:05:33,635 --> 00:05:39,930
Bây giờ chúng ta sẽ thấy việc sử dụng điều này trong bài tập sau bài giảng này.

80
00:05:39,930 --> 00:05:42,275
Để tiêu thụ một lời hứa,

81
00:05:42,275 --> 00:05:47,675
bạn sẽ đăng ký

82
00:05:47,675 --> 00:05:50,810
một chức năng gọi lại thích hợp cho khi người tiêu dùng

83
00:05:50,810 --> 00:05:53,750
của một lời hứa được thông báo hoặc từ chối lời hứa.

84
00:05:53,750 --> 00:05:59,860
Vì vậy, các callbacks được đăng ký thông qua .then () để promise.

85
00:05:59,860 --> 00:06:07,040
Bạn sẽ sử dụng .catch () để bắt các lỗi trong lời hứa trả về.

86
00:06:07,040 --> 00:06:09,845
Bây giờ các phương pháp .then () có thể được xích lại

87
00:06:09,845 --> 00:06:15,205
với nhau như bạn sẽ thấy trong bài tập sau.

88
00:06:15,205 --> 00:06:19,730
Ví dụ, bạn thường sẽ xử lý một lời hứa bằng cách

89
00:06:19,730 --> 00:06:26,250
xăng.then () và .catch () vào giá trị lời hứa.