1
00:00:00,000 --> 00:00:04,722
[MUSIC]

2
00:00:04,722 --> 00:00:10,212
Khi chúng ta đang nói về các dịch vụ trong mô-đun trước đó, tôi đã đề cập đến

3
00:00:10,212 --> 00:00:16,070
những lời hứa và sau đó tôi hứa rằng tôi sẽ trở lại hứa hẹn trong mô-đun này.

4
00:00:17,360 --> 00:00:20,360
Vì vậy, ở đây chúng tôi sẽ thực hiện lời hứa của tôi với bạn.

5
00:00:22,090 --> 00:00:28,310
Một tính toán đồng bộ là tất cả các nơi trên toàn thế giới web.

6
00:00:28,310 --> 00:00:31,410
Và cách web hoạt động.

7
00:00:32,880 --> 00:00:35,810
Nếu bạn đang đến từ thế giới lập trình tuần tự,

8
00:00:37,040 --> 00:00:41,640
quấn đầu của bạn xung quanh một tính toán đồng bộ mất khá nhiều nỗ lực.

9
00:00:42,680 --> 00:00:48,570
Đã có nhiều nỗ lực để làm cho tính toán không đồng bộ là không đau

10
00:00:48,570 --> 00:00:54,680
nhất có thể cho những người chuyển đổi vào nó từ cuốn sách tính toán tuần tự.

11
00:00:56,850 --> 00:01:01,470
Một trong những nỗ lực như vậy là làm cho tính toán không đồng bộ

12
00:01:01,470 --> 00:01:04,790
dễ dàng hơn để thực hiện là hứa hẹn.

13
00:01:06,040 --> 00:01:10,304
Như chúng ta nhận ra, khi chúng ta thực hiện bất kỳ yêu cầu nào

14
00:01:10,304 --> 00:01:15,220
đến bất kỳ dịch vụ hoặc đến một máy chủ phụ trợ,

15
00:01:16,530 --> 00:01:21,180
nó sẽ mất một thời gian để kết quả có sẵn cho chúng tôi.

16
00:01:22,550 --> 00:01:30,840
Nếu chúng ta làm một yêu cầu như vậy trong khi chúng ta đang tiến hành công việc của chúng tôi,

17
00:01:30,840 --> 00:01:35,680
thì có khả năng cao tính toán của chúng tôi sẽ bị mắc kẹt tại điểm này,

18
00:01:35,680 --> 00:01:37,890
chờ kết quả.

19
00:01:37,890 --> 00:01:44,070
Đây là một không có trong điều kiện làm một trải nghiệm người dùng tốt.

20
00:01:46,090 --> 00:01:52,420
Vì vậy, điều quan trọng là bất cứ khi nào kết quả của bạn sẽ mất thời gian,

21
00:01:52,420 --> 00:01:57,660
bạn sẽ có thể tiến hành tiếp mà không cần chờ đợi các quy tắc.

22
00:01:57,660 --> 00:02:01,492
Và đó là nơi tính toán không đồng bộ đến lợi thế của bạn.

23
00:02:01,492 --> 00:02:04,640
Trong tính toán không đồng bộ khi bạn gửi yêu cầu,

24
00:02:04,640 --> 00:02:07,800
bạn đang mong đợi kết quả sẽ trở lại vào một thời điểm sau đó, và

25
00:02:07,800 --> 00:02:12,720
bạn sẽ có thể đối phó với thực tế, kết quả cơ bản sẽ trở lại tại một thời điểm

26
00:02:14,490 --> 00:02:20,410
muộn hơn nhiều so với nơi bạn đã ở tại thời điểm khi bạn thực hiện yêu cầu.

27
00:02:21,830 --> 00:02:25,710
Lời hứa cung cấp cho chúng ta một cách để đối phó với điều này.

28
00:02:26,790 --> 00:02:32,540
Hãy xem xét những lời hứa chi tiết hơn một chút trong bài giảng này.

29
00:02:32,540 --> 00:02:35,910
Và sau đó chúng ta cũng sẽ thấy việc sử dụng các lời hứa

30
00:02:35,910 --> 00:02:39,490
trong ứng dụng Angular của chúng tôi một chút sau đó.

31
00:02:39,490 --> 00:02:44,750
Hứa hẹn, khái niệm chung là một khu vực rất rộng lớn của chính nó.

32
00:02:44,750 --> 00:02:49,030
Và trong khóa học này, tôi không có thời gian để đi qua các chi tiết của lời hứa.

33
00:02:49,030 --> 00:02:51,780
Điều đó sẽ trở thành một khóa học trong chính nó.

34
00:02:51,780 --> 00:02:56,950
Tôi sẽ cung cấp cho bạn những yếu tố cần thiết của những lời hứa cần thiết cho

35
00:02:56,950 --> 00:03:02,490
chúng ta để hiểu làm thế nào để sử dụng những lời hứa trong ứng dụng góc cạnh của chúng ta.

36
00:03:02,490 --> 00:03:07,230
Tôi cung cấp cho bạn rất nhiều dẫn đến các

37
00:03:07,230 --> 00:03:11,380
nguồn lực bổ sung, nơi bạn có thể đi và kiểm tra các lời hứa chi tiết hơn.

38
00:03:13,110 --> 00:03:17,230
Vì vậy, đi đến câu hỏi đó, chính xác lời hứa là gì?

39
00:03:17,230 --> 00:03:21,690
Một lời hứa là một cơ chế hỗ trợ tính toán không đồng bộ.

40
00:03:21,690 --> 00:03:26,580
Tôi chỉ đưa ra một lời giải thích dài về lý do tại sao tính toán không đồng bộ

41
00:03:26,580 --> 00:03:31,340
là điều cần thiết cho web để hoạt động.

42
00:03:31,340 --> 00:03:36,720
Bây giờ, trong việc sử dụng một lời hứa, lời hứa cung cấp

43
00:03:36,720 --> 00:03:42,760
một cơ chế hoặc một proxy cho một giá trị mà không có sẵn tại thời điểm mà bạn yêu cầu nó.

44
00:03:42,760 --> 00:03:46,050
Vì vậy, một lời hứa sẽ trả lại một lời hứa cho bạn, nói rằng

45
00:03:46,050 --> 00:03:51,430
khi kết quả trở nên có sẵn, nó sẽ trở lại và cung cấp kết quả cho bạn.

46
00:03:51,430 --> 00:03:56,850
Vì vậy, một lời hứa trả về một đối tượng proxy cho bạn, và bạn giữ cho đối tượng proxy.

47
00:03:56,850 --> 00:04:02,030
Và đối tượng proxy đó sẽ cho bạn quyền truy cập vào kết quả khi chúng có sẵn.

48
00:04:02,030 --> 00:04:07,290
Và có một phương pháp trong cách bạn chờ kết quả.

49
00:04:07,290 --> 00:04:11,560
Bạn thực sự không đình chỉ tính toán của bạn tại thời điểm đó thay vào đó bạn

50
00:04:13,110 --> 00:04:19,948
cấu hình một cách chấp nhận kết quả khi nó trở lại từ lời hứa đó.

51
00:04:19,948 --> 00:04:23,780
Nói tóm lại,

52
00:04:23,780 --> 00:04:27,960
promise đại diện cho một giá trị sẽ có sẵn tại một thời điểm tương lai.

53
00:04:27,960 --> 00:04:29,680
Nó có thể cũng có sẵn ngay lập tức,

54
00:04:29,680 --> 00:04:32,960
trong trường hợp đó lời hứa sẽ trả lại giá trị ngay lập tức.

55
00:04:32,960 --> 00:04:37,940
Nhưng trong trường hợp nó cần phải trả về một giá trị tại một ngày trong tương lai, sau đó nó cung cấp cho bạn

56
00:04:37,940 --> 00:04:42,040
lời hứa rằng giá trị đó khi nó trở nên có sẵn sẽ được trả lại cho bạn.

57
00:04:43,400 --> 00:04:47,820
Luôn luôn có khả năng rằng lời hứa không thể được đáp ứng,

58
00:04:47,820 --> 00:04:50,730
bởi vì kết quả không có sẵn vì bất cứ lý do gì.

59
00:04:51,950 --> 00:04:57,150
Trong trường hợp đó, một lỗi sẽ được gửi cho bạn, hoặc một từ chối sẽ được gửi

60
00:04:57,150 --> 00:05:02,430
cho bạn, và nó là tùy thuộc vào bạn để đối phó với thực tế là lời hứa đã bị từ chối.

61
00:05:03,930 --> 00:05:06,890
Chúng ta nhìn vào cách chúng ta đối phó với điều đó trong slide tiếp theo.

62
00:05:07,950 --> 00:05:11,180
Như chúng ta đã biết trước đó, một lời hứa là một ủy quyền cho một

63
00:05:11,180 --> 00:05:15,080
điều gì đó sẽ xảy ra trong tương lai hoặc có thể không bao giờ xảy ra trong tương lai.

64
00:05:15,080 --> 00:05:19,745
Vì vậy, một lời hứa khi nó được trao cho bạn, sẽ ở trong trạng thái chờ xử lý.

65
00:05:20,860 --> 00:05:25,130
Bây giờ khi lời hứa giải quyết, đó là kết quả trở nên có sẵn và

66
00:05:25,130 --> 00:05:30,080
lời hứa có thể cung cấp kết quả cho bạn, sau đó lời hứa sẽ giải quyết hoặc

67
00:05:30,080 --> 00:05:31,490
sẽ hoàn thành.

68
00:05:31,490 --> 00:05:37,130
Và trong trường hợp đó lời hứa sẽ chuyển từ trạng thái đang chờ xử lý sang trạng thái giải quyết hoặc

69
00:05:37,130 --> 00:05:38,490
trạng thái hoàn thành.

70
00:05:38,490 --> 00:05:41,220
Vì vậy, tại thời điểm đó kết quả của bạn có sẵn cho bạn.

71
00:05:42,540 --> 00:05:48,760
Có một cơ hội nhỏ rằng lời hứa có thể bị từ chối vì một lỗi,

72
00:05:48,760 --> 00:05:50,590
hoặc bất cứ điều gì là lý do.

73
00:05:50,590 --> 00:05:53,280
Trong tình huống xa xôi đó,

74
00:05:53,280 --> 00:05:57,980
bạn sẽ được chuyển một từ chối và trong trường hợp đó, lời hứa sẽ được

75
00:05:57,980 --> 00:06:02,209
coi là ở trạng thái bị từ chối khi người từ chối được chuyển giao.

76
00:06:03,380 --> 00:06:06,710
Vì vậy, khi bạn tạo ra một lời hứa, như tôi đã nói,

77
00:06:06,710 --> 00:06:10,560
một lời hứa là một đối tượng proxy được giao cho bạn.

78
00:06:10,560 --> 00:06:14,580
Vì vậy, khi bạn cung cấp một lời hứa cho ai đó, lời hứa trong nội bộ sẽ có

79
00:06:14,580 --> 00:06:17,500
một chức năng mà sẽ đối phó với cả quyết tâm và

80
00:06:17,500 --> 00:06:20,310
các lựa chọn từ chối bên trong đó.

81
00:06:21,480 --> 00:06:22,540
Khi bạn viết mã,

82
00:06:22,540 --> 00:06:28,190
bạn sẽ thấy rằng bạn sẽ viết mã như mới Promise (hàm (giải quyết, từ chối).

83
00:06:28,190 --> 00:06:33,350
Cho dù nó giải quyết hay bị từ chối, chúng ta cần phải có khả năng gửi

84
00:06:33,350 --> 00:06:38,290
lại thông tin cho bất cứ ai mà chúng ta đã gửi lời hứa đến.

85
00:06:39,570 --> 00:06:41,600
Làm thế nào để chúng ta làm điều này trong mã?

86
00:06:41,600 --> 00:06:44,040
Chúng ta hãy nhìn vào điều đó trong slide tiếp theo.

87
00:06:45,280 --> 00:06:50,430
Dưới đây là một ví dụ về cách hứa hẹn được cấu hình trong mã.

88
00:06:50,430 --> 00:06:53,870
Thật vậy, ví dụ này có nguồn gốc từ bài tập mà bạn sẽ làm

89
00:06:53,870 --> 00:06:55,850
một chút sau đó.

90
00:06:55,850 --> 00:07:01,100
Vì vậy, ở đây, khi chúng tôi cấu hình dịch vụ của chúng tôi, chúng tôi có thể có dịch vụ của chúng tôi

91
00:07:01,100 --> 00:07:06,830
trả lại lời hứa cho một thành phần yêu cầu dữ liệu từ dịch vụ.

92
00:07:06,830 --> 00:07:08,368
Vì vậy, khi lời hứa được trả lại,

93
00:07:08,368 --> 00:07:13,810
sau đó lời hứa trở lại có sẵn cho bạn như một đối tượng.

94
00:07:13,810 --> 00:07:18,190
Và lời hứa này cung cấp hai phương pháp, sau đó và phương pháp bắt.

95
00:07:19,420 --> 00:07:23,416
Bây giờ, sau đó, lời hứa đã được giải quyết thành công.

96
00:07:23,416 --> 00:07:28,300
Sau đó lời hứa sẽ dẫn đến

97
00:07:28,300 --> 00:07:32,810
việc gọi một quyết tâm.

98
00:07:32,810 --> 00:07:36,960
Như bạn đã thấy, lời hứa được xây dựng, và bên trong lời hứa,

99
00:07:36,960 --> 00:07:42,170
bạn có chức năng, quyết tâm, và từ chối, như hai tham số.

100
00:07:42,170 --> 00:07:46,820
Vì vậy, nếu lời hứa là thành công có thể cung cấp kết quả,

101
00:07:46,820 --> 00:07:51,680
sau đó nó sẽ gọi phương pháp giải quyết và sau đó trả lại kết quả cho bạn.

102
00:07:51,680 --> 00:07:53,520
Kết quả có được thực tế ở đâu?

103
00:07:54,820 --> 00:07:58,820
Khi bạn viết mã chờ đợi

104
00:07:58,820 --> 00:08:04,400
lời hứa sau đó bạn sẽ chỉ định phải làm gì khi lời hứa trả về kết quả

105
00:08:04,400 --> 00:08:09,370
trong tùy chọn sau đó cho lời hứa đó.

106
00:08:09,370 --> 00:08:14,590
Vì vậy, nói ví dụ, bạn sẽ nói getdishes.Then và bên trong sau đó

107
00:08:14,590 --> 00:08:18,810
bạn sẽ cung cấp các chức năng mà sẽ đối phó với kết quả khi nó đi vào.

108
00:08:20,370 --> 00:08:25,700
Nếu lời hứa không thể giải quyết một cách chính xác thì nó sẽ từ chối

109
00:08:25,700 --> 00:08:28,570
với lỗi được gửi lại cho bạn.

110
00:08:28,570 --> 00:08:31,600
Lỗi là một đối tượng lỗi sẽ được gửi lại cho bạn.

111
00:08:31,600 --> 00:08:36,560
Vì vậy, khi lời hứa của họ bị từ chối, sau đó bạn đối phó với

112
00:08:36,560 --> 00:08:41,020
sự từ chối bằng cách sử dụng một nắm bắt trong mã của bạn.

113
00:08:41,020 --> 00:08:47,460
Vì vậy, trong bắt, bạn sẽ cung cấp một chức năng mà sẽ đối phó với các lỗi.

114
00:08:47,460 --> 00:08:51,470
Ví dụ, bạn chỉ có thể xuất thông báo lỗi,

115
00:08:51,470 --> 00:08:56,770
đăng nhập giao diện điều khiển và đối phó với lỗi theo cách đó.

116
00:08:56,770 --> 00:09:01,080
Hoặc bạn có thể có một cách phức tạp hơn để xử lý lỗi.

117
00:09:01,080 --> 00:09:06,670
Điều đó sẽ được cung cấp trong tùy chọn bắt mà bạn cung cấp cho mã hứa hẹn đó

118
00:09:06,670 --> 00:09:12,130
về phía bạn khi lời hứa cung cấp một từ chối cho bạn.

119
00:09:12,130 --> 00:09:17,690
Vì vậy, đây là cách hai mặt của đồng xu đối phó với lời hứa.

120
00:09:17,690 --> 00:09:21,160
Từ một bên, bạn sẽ được gửi một đối tượng lời hứa, và

121
00:09:21,160 --> 00:09:24,730
khi bạn nhận được đối tượng lời hứa, với đối tượng lời hứa, bạn sẽ hoặc làm

122
00:09:24,730 --> 00:09:28,300
sau đó và bắt, vì vậy bạn phải thực hiện cả hai sau đó và

123
00:09:28,300 --> 00:09:33,510
bắt số liệu bắt thay đổi đối tượng lời hứa đó.

124
00:09:34,780 --> 00:09:39,910
Và sau đó, từ lời hứa đó sang một bên, nếu lời hứa kết quả chính xác,

125
00:09:39,910 --> 00:09:44,757
thì quyết tâm sẽ được gọi và do đó, kết quả sẽ được chuyển giao

126
00:09:44,757 --> 00:09:48,770
theo phương pháp sau đó của lời hứa của bạn.

127
00:09:48,770 --> 00:09:51,175
Nếu lời hứa bị từ chối,

128
00:09:51,175 --> 00:09:55,530
cuộc gọi từ chối sẽ cung cấp lỗi vào bắt của bạn.

129
00:09:56,760 --> 00:10:01,725
Vì vậy, đây là cách bạn sẽ thực hiện mã bằng cách sử dụng lời hứa.

130
00:10:01,725 --> 00:10:07,375
Chúng tôi sẽ giải quyết ví dụ trong bài tập sau bài giảng này.

131
00:10:07,375 --> 00:10:09,786
Bây giờ rõ ràng câu hỏi tôi đặt ra là tại sao những lời hứa?

132
00:10:11,347 --> 00:10:13,927
Sau đó, khi chúng ta đối phó với Node JS,

133
00:10:13,927 --> 00:10:18,237
chúng ta sẽ đối phó với cách chúng ta có thể xây dựng callbacks.

134
00:10:18,237 --> 00:10:21,677
Và tôi sẽ giải thích các chi tiết của callbacks và cách để đối phó với

135
00:10:21,677 --> 00:10:29,920
callbacks khi chúng tôi bao gồm Node JS trong khóa học cuối cùng của chuyên môn hóa này.

136
00:10:29,920 --> 00:10:37,400
Callbacks có một vấn đề của việc tạo ra những gì được gọi là callback hell.

137
00:10:37,400 --> 00:10:40,000
Vì vậy, bạn có rất nhiều lồng nhau mã callback

138
00:10:40,000 --> 00:10:44,650
đó là rất phức tạp để có thể tìm ra những gì nó đang cố gắng để làm.

139
00:10:44,650 --> 00:10:50,970
Lời hứa cung cấp một cách giải quyết vấn đề địa ngục gọi lại này.

140
00:10:50,970 --> 00:10:55,270
Nhưng cho thời điểm chúng ta đang tập trung vào Angular, tôi sẽ chỉ đề cập đến điểm này.

141
00:10:55,270 --> 00:10:59,050
Và sau đó chúng tôi sẽ quay lại để giải quyết câu hỏi này trong khóa học cuối cùng.

142
00:11:00,760 --> 00:11:05,600
Ưu điểm khác của việc sử dụng lời hứa là những lời hứa có thể được thay đổi.

143
00:11:05,600 --> 00:11:08,780
Một lời hứa khi nó cung cấp kết quả trong thùng,

144
00:11:08,780 --> 00:11:11,130
bạn có thể tạo ra một lời hứa và trở lại, và

145
00:11:11,130 --> 00:11:16,280
lời hứa đó có thể được xử lý bằng cách chuỗi khác sau đó phương pháp đó và vân vân.

146
00:11:16,280 --> 00:11:21,720
Vì vậy, bạn có thể chuỗi một tập hợp các phương pháp sau đó với nhau để đối phó với

147
00:11:21,720 --> 00:11:23,470
những lời hứa đằng sau khác.

148
00:11:25,610 --> 00:11:31,850
Nếu kết quả là ngay lập tức có sẵn hoặc nếu bạn sẽ từ chối ngay lập tức,

149
00:11:31,850 --> 00:11:37,190
sau đó hứa cung cấp một phương pháp ngay lập tức trở lại mà không cần chờ đợi

150
00:11:37,190 --> 00:11:39,900
lời hứa để giải quyết hoặc từ chối.

151
00:11:39,900 --> 00:11:45,766
Trong trường hợp đó, bạn sẽ chỉ đơn giản là nói lời hứa với một p.resolve vốn và

152
00:11:45,766 --> 00:11:52,243
promise.Refute và sau đó trả về kết quả hoặc lỗi ngay lập tức.

153
00:11:52,243 --> 00:11:57,079
Trong bài tập đầu tiên, chúng tôi sẽ giải quyết phương pháp trả lại giá trị

154
00:11:57,079 --> 00:11:59,480
từ dịch vụ của chúng tôi cho các thành phần của chúng tôi.

155
00:12:00,920 --> 00:12:04,010
Trong phần thứ hai của bài tập, chúng tôi sẽ

156
00:12:04,010 --> 00:12:09,820
giải quyết tình huống mà lời hứa sẽ giải quyết sau một thời gian.

157
00:12:09,820 --> 00:12:13,400
Và cũng trong thành phần của chúng tôi, chúng ta sẽ có thể đối phó với thực tế là

158
00:12:13,400 --> 00:12:20,280
kết quả sẽ trở lại một chút sau khi bạn yêu cầu kết quả.

159
00:12:22,485 --> 00:12:25,679
Với sự hiểu biết nhanh chóng này về những lời hứa, chúng

160
00:12:25,679 --> 00:12:30,393
ta hãy tiếp tục bài tập tiếp theo, nơi chúng ta sẽ đối phó với những lời hứa.

161
00:12:30,393 --> 00:12:33,769
[ NHẠC]