1
00:00:03,650 --> 00:00:06,180
Trong bài tập trước,

2
00:00:06,180 --> 00:00:09,414
chúng tôi đã học được về hai khía cạnh mới của JavaScript,

3
00:00:09,414 --> 00:00:13,155
hỗ trợ các chức năng hạng nhất và đóng cửa.

4
00:00:13,155 --> 00:00:20,250
Chúng tôi cũng thấy cách Node xử lý khía cạnh lập trình không đồng bộ và cách Node

5
00:00:20,250 --> 00:00:24,015
hỗ trợ thực thi mã không đồng

6
00:00:24,015 --> 00:00:28,365
bộ với việc sử dụng callbacks và cũng xử lý lỗi.

7
00:00:28,365 --> 00:00:31,815
Hãy xem một ví dụ về cách chúng tôi sử dụng điều này

8
00:00:31,815 --> 00:00:36,650
trong ứng dụng Node của chúng tôi trong bài tập này.

9
00:00:36,650 --> 00:00:42,315
Tiếp tục với nơi chúng tôi rời khỏi trong bài tập trước,

10
00:00:42,315 --> 00:00:48,025
bây giờ tôi sẽ đi và sửa đổi các mô-đun Node hình chữ nhật,

11
00:00:48,025 --> 00:00:51,670
để nó có thể mất sự giúp đỡ của callbacks.

12
00:00:51,670 --> 00:00:55,375
Vì vậy, tôi sẽ loại bỏ các xuất khẩu ở đây,

13
00:00:55,375 --> 00:00:59,800
và thay vào đó, họ sẽ sửa đổi chức năng này.

14
00:00:59,800 --> 00:01:03,190
Tôi sẽ sử dụng hai chức năng này một chút sau đó,

15
00:01:03,190 --> 00:01:05,925
vì vậy đó là lý do tại sao tôi lưu chúng ở phía dưới.

16
00:01:05,925 --> 00:01:07,515
Vì vậy, hãy để tôi giữ chúng sang một bên.

17
00:01:07,515 --> 00:01:11,530
Và sau đó tôi sẽ sửa đổi mô-đun hình chữ nhật này như sau.

18
00:01:11,530 --> 00:01:15,270
Vì vậy, chúng tôi sẽ nói module.exports.

19
00:01:15,270 --> 00:01:20,025
Vì vậy, chúng tôi đang sử dụng cách tiêu chuẩn mô-đun được xử lý.

20
00:01:20,025 --> 00:01:26,185
Và điều này sẽ xuất khẩu chức năng này trong đó có ba tham số,

21
00:01:26,185 --> 00:01:30,565
x và y và callback.

22
00:01:30,565 --> 00:01:37,300
Các callback là một chức năng mà sẽ được cung cấp trong khi mô-đun này được gọi.

23
00:01:37,300 --> 00:01:43,825
Vì vậy, đây là việc sử dụng các chức năng lớp đầu tiên mà chúng ta đã nói về trước đó.

24
00:01:43,825 --> 00:01:46,775
Vì vậy, bên trong callback này,

25
00:01:46,775 --> 00:01:49,940
vì vậy bạn có thể thấy rằng bạn đang nhận được hai tham số, x và y

26
00:01:49,940 --> 00:01:51,965
Trong trường hợp này, cho hình chữ nhật,

27
00:01:51,965 --> 00:01:55,520
x và y tương ứng với chiều dài và chiều rộng

28
00:01:55,520 --> 00:02:01,550
của hình chữ nhật đang được thông qua như là hai giá trị.

29
00:02:01,550 --> 00:02:05,090
Vì vậy, bên trong đây, chúng ta sẽ kiểm tra để xem

30
00:02:05,090 --> 00:02:10,300
nếu x là nhỏ hơn hoặc bằng 0 hoặc y là nhỏ hơn hoặc bằng 0.

31
00:02:10,300 --> 00:02:13,255
Chúng tôi đã viết mã như thế này ở đây.

32
00:02:13,255 --> 00:02:17,630
Vì vậy, tôi sẽ chỉ sao chép mã này từ đây

33
00:02:17,630 --> 00:02:23,330
và sau đó mang nó qua đây và sau đó chúng tôi sẽ chỉnh sửa.

34
00:02:23,330 --> 00:02:26,090
Vì vậy trong trường hợp này, đây là nếu x nhỏ

35
00:02:26,090 --> 00:02:30,135
hơn hoặc bằng 0 hoặc y nhỏ hơn hoặc bằng 0.

36
00:02:30,135 --> 00:02:32,810
Trong trường hợp này, chúng ta phải làm gì?

37
00:02:32,810 --> 00:02:35,435
Trong trường hợp này, chúng ta nhận thấy rằng

38
00:02:35,435 --> 00:02:39,750
kích thước của hình chữ nhật nhỏ hơn hoặc bằng không.

39
00:02:39,750 --> 00:02:43,775
Vì vậy, chúng ta phải xử lý nó một cách khác nhau,

40
00:02:43,775 --> 00:02:46,330
và chúng ta sẽ làm một phần khác của nó.

41
00:02:46,330 --> 00:02:52,790
Phần khác nơi chúng tôi xử lý tình huống mà hình chữ nhật là một hình chữ nhật hợp lệ.

42
00:02:52,790 --> 00:02:54,245
Vì vậy, trong trường hợp này,

43
00:02:54,245 --> 00:03:04,580
những gì chúng tôi sẽ làm là sau đó sử dụng một setTimeout.

44
00:03:04,580 --> 00:03:08,090
Vì vậy, ở đây, tôi đang mô phỏng một thực tế rằng bất cứ điều gì

45
00:03:08,090 --> 00:03:11,860
đang được thực hiện trong hình chữ nhật này sẽ mất một thời gian.

46
00:03:11,860 --> 00:03:14,375
Vì vậy, đây là quá trình xử lý không đồng bộ.

47
00:03:14,375 --> 00:03:18,710
Bây giờ, kể từ khi tôi không có rất nhiều công việc để làm trong nền,

48
00:03:18,710 --> 00:03:22,530
vì vậy tôi sẽ mô phỏng điều đó bằng cách sử dụng

49
00:03:22,530 --> 00:03:24,830
hàm SetTimeout của JavaScript và sau đó

50
00:03:24,830 --> 00:03:28,825
trì hoãn trước khi hàm callback được gọi.

51
00:03:28,825 --> 00:03:32,210
Vì vậy, cách tôi sắp xếp điều này là như sau.

52
00:03:32,210 --> 00:03:34,270
Vì vậy, bên trong setTimeout,

53
00:03:34,270 --> 00:03:40,445
tôi sẽ gọi chức năng này ở đó

54
00:03:40,445 --> 00:03:44,855
và sắp xếp một sự chậm trễ của

55
00:03:44,855 --> 00:03:50,570
2.000 mili giây hoặc hai giây sau đó chức năng này sẽ được gọi.

56
00:03:50,570 --> 00:03:52,003
Vì vậy, nếu bạn nhớ lại,

57
00:03:52,003 --> 00:03:54,890
setTimeout được hỗ trợ trong JavaScript,

58
00:03:54,890 --> 00:03:58,070
nó mất như là tham số đầu tiên một chức năng và

59
00:03:58,070 --> 00:04:03,450
tham số thứ hai sẽ là khoảng thời gian mà điều này sẽ bị trì hoãn.

60
00:04:03,450 --> 00:04:07,120
Vì vậy, để tôi thụt lề này vào.

61
00:04:07,120 --> 00:04:09,255
Bây giờ, tôi cần phải điền vào chức năng này ở đây.

62
00:04:09,255 --> 00:04:11,915
Vì vậy, tôi đã bắt đầu với các chức năng mũi tên ở đây

63
00:04:11,915 --> 00:04:15,575
mà không mất tham số và sau đó khi có được gọi,

64
00:04:15,575 --> 00:04:20,745
tôi sẽ phát hành một cuộc gọi để gọi lại.

65
00:04:20,745 --> 00:04:22,880
Gọi lại này là một hàm callback

66
00:04:22,880 --> 00:04:25,760
sẽ được thông qua như là tham số thứ ba ở đây.

67
00:04:25,760 --> 00:04:33,440
Chức năng gọi lại này, như bạn nhận thấy, có hai tham số.

68
00:04:33,440 --> 00:04:38,245
Cái đầu tiên là lỗi và cái thứ hai là giá trị trả về.

69
00:04:38,245 --> 00:04:40,625
Vì vậy, trong trường hợp này, kể từ khi chúng ta có một lỗi,

70
00:04:40,625 --> 00:04:44,750
bởi vì x là nhỏ hơn hoặc bằng 0 và y là nhỏ hơn hoặc bằng 0, vì

71
00:04:44,750 --> 00:04:50,820
vậy giá trị đầu tiên tôi sẽ vượt qua như là lỗi mới,

72
00:04:50,820 --> 00:05:00,603
và lỗi này là chính xác chuỗi này mà tôi đã sử dụng trong console.log sau đó,

73
00:05:00,603 --> 00:05:03,915
và đó là những gì tôi sẽ vượt qua như lỗi ở đây.

74
00:05:03,915 --> 00:05:06,160
Bây giờ hãy để tôi xóa console.log đó,

75
00:05:06,160 --> 00:05:07,625
tôi không còn cần nó nữa.

76
00:05:07,625 --> 00:05:08,890
Vì vậy, cho callback,

77
00:05:08,890 --> 00:05:13,210
tôi sẽ tạo ra một đối tượng lỗi mới và sau đó vượt qua điều này

78
00:05:13,210 --> 00:05:18,850
như là giá trị trả về cho hàm callback, tham số đầu tiên.

79
00:05:18,850 --> 00:05:23,770
Vì vậy, tôi sẽ nói kích thước hình chữ nhật nên lớn hơn 0.

80
00:05:23,770 --> 00:05:28,240
Vì vậy, chúng tôi sẽ nói l,

81
00:05:28,240 --> 00:05:39,000
đây là x và giá trị y mà chúng tôi nhận được như là các giá trị đầu vào đó.

82
00:05:39,000 --> 00:05:40,650
Vì vậy, đó là cuộc gọi lại.

83
00:05:40,650 --> 00:05:43,890
Và phần thứ hai của cuộc gọi lại này,

84
00:05:43,890 --> 00:05:51,290
tôi sẽ vượt qua như null bởi vì điều này sẽ trả về một lỗi.

85
00:05:51,290 --> 00:05:54,345
Vì vậy, khi bạn trả về một lỗi như là tham số đầu tiên,

86
00:05:54,345 --> 00:05:59,250
tham số thứ hai sẽ bị bỏ qua khi callback đó chỉ nhận được bởi

87
00:05:59,250 --> 00:06:06,510
các mô-đun nút từ nơi chúng tôi đang gọi chức năng đặc biệt này ở đó.

88
00:06:06,510 --> 00:06:09,085
Vì vậy, với sự sắp xếp này,

89
00:06:09,085 --> 00:06:10,700
rất ít hơn 0,

90
00:06:10,700 --> 00:06:18,590
vì vậy hãy để tôi cho một số không gian ở đây để nó được thụt lề đúng cách ở đây.

91
00:06:18,590 --> 00:06:21,650
Vì vậy, cách tôi sắp xếp này

92
00:06:21,650 --> 00:06:26,135
ở đây là nếu x nhỏ hơn 0 và y nhỏ hơn 0,

93
00:06:26,135 --> 00:06:30,040
tôi sẽ gọi lại chức năng gọi lại đã được thông qua,

94
00:06:30,040 --> 00:06:32,424
nhưng tham số đầu tiên sẽ vượt qua trong

95
00:06:32,424 --> 00:06:36,307
lỗi vì ở đây chúng tôi nhận thấy rằng có một lỗi,

96
00:06:36,307 --> 00:06:38,930
và tham số thứ hai sẽ là null.

97
00:06:38,930 --> 00:06:40,940
Nếu đây không phải là trường hợp,

98
00:06:40,940 --> 00:06:44,550
sau đó tôi sẽ gọi cùng một cuộc gọi lại,

99
00:06:44,550 --> 00:06:46,910
nhưng với tham số đầu tiên.

100
00:06:46,910 --> 00:06:51,800
Vậy hãy để tôi sao chép đoạn mã đó ở đây.

101
00:06:51,800 --> 00:07:05,490
Tôi vẫn sẽ sử dụng SetTimeout ở đây.

102
00:07:05,490 --> 00:07:10,727
Nhưng phần đầu tiên đó sẽ không phải là một lỗi,

103
00:07:10,727 --> 00:07:13,005
thay vào đó, phần đầu tiên,

104
00:07:13,005 --> 00:07:15,235
trong trường hợp này, không có lỗi.

105
00:07:15,235 --> 00:07:20,455
Vì vậy, tôi chỉ đi để vượt qua giá trị đó là null.

106
00:07:20,455 --> 00:07:22,950
Vì vậy, điều đó có nghĩa là lỗi được đặt thành null.

107
00:07:22,950 --> 00:07:26,335
Vì vậy, đây là một hình chữ nhật hợp lệ.

108
00:07:26,335 --> 00:07:29,965
Vì vậy, chúng ta có thể tính toán các giá trị cho hình chữ nhật.

109
00:07:29,965 --> 00:07:35,165
Nhưng thay vào đó, tôi sẽ chỉ đơn giản là vượt qua trong

110
00:07:35,165 --> 00:07:40,020
một đối tượng JavaScript chứa hai chức năng

111
00:07:40,020 --> 00:07:45,330
như hai giá trị bên trong đối tượng JavaScript này.

112
00:07:45,330 --> 00:07:50,355
Vì vậy, ở đây tôi sẽ lấy hai,

113
00:07:50,355 --> 00:07:54,530
chu vi và diện tích,

114
00:07:55,250 --> 00:08:05,639
và sau đó hai sẽ được thông qua như hai giá trị ở đây,

115
00:08:05,639 --> 00:08:07,807
chu vi và diện tích.

116
00:08:07,807 --> 00:08:12,740
Và hai, kể từ khi chúng xảy ra là một đối tượng JavaScript,

117
00:08:12,740 --> 00:08:16,544
vì vậy chu vi và diện tích sẽ là

118
00:08:16,544 --> 00:08:22,690
hai thuộc tính mà tôi sẽ vượt qua bên trong các đối tượng JavaScript,

119
00:08:22,690 --> 00:08:25,295
và đó là nó.

120
00:08:25,295 --> 00:08:28,570
Vì vậy, ở đây, trong trường hợp thứ hai,

121
00:08:28,570 --> 00:08:32,034
lỗi được thiết lập để null vì không có lỗi,

122
00:08:32,034 --> 00:08:33,190
nhưng phần thứ hai,

123
00:08:33,190 --> 00:08:37,715
nhận thấy rằng tôi đang đi qua trong một đối tượng JavaScript chứa hai thuộc tính,

124
00:08:37,715 --> 00:08:41,530
chu vi và diện tích, đó là hai chức năng ở đây.

125
00:08:41,530 --> 00:08:46,060
Vì vậy, hai hàm là hàm chu vi và hàm diện tích.

126
00:08:46,060 --> 00:08:49,390
Vì vậy, đối tượng JavaScript này sẽ được thông qua trở lại như là

127
00:08:49,390 --> 00:08:53,705
giá trị trả về cho các callback ở đây, giá trị thứ hai.

128
00:08:53,705 --> 00:08:56,035
Và một lần nữa, tôi sẽ trì hoãn điều này bằng

129
00:08:56,035 --> 00:09:02,900
một khoảng thời gian hai thứ hai trước khi giá trị sẽ được truyền lại bởi chức năng này.

130
00:09:02,900 --> 00:09:07,075
Lý do tại sao tôi đang sử dụng setTimeout là để mô phỏng

131
00:09:07,075 --> 00:09:11,780
một sự chậm trễ trước khi gọi lại đến từ phía bên kia.

132
00:09:11,780 --> 00:09:15,280
Vì vậy, loại này đại diện cho các tình huống mà, ví dụ,

133
00:09:15,280 --> 00:09:18,565
bạn phát hành một cuộc gọi cơ sở dữ liệu đến cơ sở

134
00:09:18,565 --> 00:09:23,300
dữ liệu, và cơ sở dữ liệu cần phải được đọc trước khi giá trị được truyền lại cho bạn.

135
00:09:23,300 --> 00:09:25,855
Vì vậy, điều đó sẽ mất một khoảng thời gian nhất định.

136
00:09:25,855 --> 00:09:32,560
Vì vậy, tôi về cơ bản mô phỏng này tại thời điểm này bằng cách sử dụng chức năng SetTimeout ở đây.

137
00:09:32,560 --> 00:09:37,000
Sau đó, bạn sẽ thấy rằng khi chúng ta tích hợp MongoDB với

138
00:09:37,000 --> 00:09:43,060
Express của chúng tôi trong các bài tập sau,

139
00:09:43,060 --> 00:09:45,580
sự chậm trễ đó sẽ phải được mô phỏng,

140
00:09:45,580 --> 00:09:48,670
nó sẽ được tự động gây ra bởi vì thực tế là bạn cần phải thực hiện các

141
00:09:48,670 --> 00:09:54,190
hoạt động cơ sở dữ liệu đằng sau hậu trường trước khi dữ liệu được thu thập.

142
00:09:54,190 --> 00:10:00,325
Vì vậy, ở đây, sau khi hoàn thành cập nhật mô-đun hình chữ nhật này,

143
00:10:00,325 --> 00:10:03,135
vì vậy ở đây bạn thấy rằng các mô-đun hình chữ nhật mất trong

144
00:10:03,135 --> 00:10:06,830
ba tham số vì nó là một cuộc gọi đầu vào đây

145
00:10:06,830 --> 00:10:08,920
, x, y và gọi lại.

146
00:10:08,920 --> 00:10:12,445
Và như vậy, callback là hàm callback đang được cung cấp ở đây.

147
00:10:12,445 --> 00:10:16,585
Và hàm callback này sẽ được gọi bên trong ở đây,

148
00:10:16,585 --> 00:10:18,685
và khi hàm callback được gọi,

149
00:10:18,685 --> 00:10:22,495
hoặc là bạn vượt qua một lỗi hoặc bạn vượt qua trở lại

150
00:10:22,495 --> 00:10:28,045
một hàm cho phép bạn tính toán chu vi và diện tích của hình chữ nhật.

151
00:10:28,045 --> 00:10:33,835
Bây giờ, mô hình này gọi vào và đi vào một hàm callback

152
00:10:33,835 --> 00:10:40,300
từ một module Node và sau đó là module Node thứ hai mà khi nó hoàn thành,

153
00:10:40,300 --> 00:10:44,800
sẽ truyền lại kết quả bằng cách sử dụng hàm callback

154
00:10:44,800 --> 00:10:50,135
chính xác là mẫu mà bạn sẽ thấy thường lặp lại trong các ứng dụng Node.

155
00:10:50,135 --> 00:10:52,360
Vì vậy, đó là lý do tại sao tôi minh họa nó.

156
00:10:52,360 --> 00:10:58,735
Tất nhiên, đây là một ví dụ giả định mà tôi đang minh họa ở đây nhưng nó cho thấy

157
00:10:58,735 --> 00:11:02,525
tất cả các mẫu tiêu chuẩn mà bạn sẽ sử dụng với các

158
00:11:02,525 --> 00:11:07,065
chức năng nút và callback và cũng là xử lý lỗi.

159
00:11:07,065 --> 00:11:10,955
Bây giờ, chúng tôi đã cập nhật mô-đun hình chữ nhật ở đây.

160
00:11:10,955 --> 00:11:16,870
Chúng ta hãy đi và sửa chữa tập tin index.js để nó có thể vượt qua trong hàm callback và

161
00:11:16,870 --> 00:11:23,770
sau đó xử lý giá trị trả về được gửi trở lại từ mô-đun hình chữ nhật.

162
00:11:23,770 --> 00:11:26,940
Chuyển đổi trở lại index.js,

163
00:11:26,940 --> 00:11:31,270
bây giờ chúng ta sẽ cập nhật các tập tin index.js như sau.

164
00:11:31,270 --> 00:11:37,955
Tôi sẽ loại bỏ điều này từ các tập tin index.js thay vào đó.

165
00:11:37,955 --> 00:11:42,430
Ở đây, những gì chúng tôi sẽ kết thúc làm là gọi

166
00:11:42,430 --> 00:11:49,120
mô-đun hình chữ nhật này và

167
00:11:49,120 --> 00:11:53,880
sau đó vượt qua trong l và b như hai tham số.

168
00:11:53,880 --> 00:12:00,300
Và tham số thứ ba mà tôi sẽ vượt qua là hàm callback.

169
00:12:00,300 --> 00:12:10,080
Vì vậy hàm callback có hai tham số, err và hình chữ nhật.

170
00:12:10,080 --> 00:12:15,860
Và chức năng gọi lại này được thực hiện như sau đây.

171
00:12:15,860 --> 00:12:19,090
Vì vậy, ở đây, bạn thấy rằng tôi đang gọi

172
00:12:19,090 --> 00:12:23,785
mô-đun nút hình chữ nhật này và tôi đang

173
00:12:23,785 --> 00:12:29,050
đi qua chiều dài và chiều rộng của hai tham số đầu tiên.

174
00:12:29,050 --> 00:12:31,285
Và tham số thứ ba là, tất nhiên,

175
00:12:31,285 --> 00:12:34,355
một chức năng gọi lại mà tôi đang thực hiện ở đây.

176
00:12:34,355 --> 00:12:38,250
Vì vậy, đây là một chức năng mũi tên mà tôi đang thực hiện ở đây.

177
00:12:38,250 --> 00:12:40,510
Vì vậy, bên trong chức năng callback này,

178
00:12:40,510 --> 00:12:43,245
làm thế nào để tôi xử lý giá trị trả về?

179
00:12:43,245 --> 00:12:46,860
Vì vậy, ở đây tôi sẽ nói nếu (err),

180
00:12:46,860 --> 00:12:51,335
vì vậy nếu giá trị lỗi được trả lại cho bạn,

181
00:12:51,335 --> 00:12:59,500
sau đó tôi sẽ chỉ đơn giản là làm console.log và tôi sẽ nói

182
00:12:59,500 --> 00:13:09,100
“ERROR” và sau đó giá trị thứ hai là err.message.

183
00:13:09,100 --> 00:13:11,445
Nhớ lại rằng trong hình chữ nhật,

184
00:13:11,445 --> 00:13:14,820
chúng tôi đã tạo ra đối tượng lỗi mới này

185
00:13:14,820 --> 00:13:18,155
và sau đó thông qua trong chuỗi này bên trong đối tượng lỗi này.

186
00:13:18,155 --> 00:13:20,100
Chuỗi này sẽ được gắn

187
00:13:20,100 --> 00:13:24,380
vào đối tượng lỗi vào thuộc tính thư của đối tượng lỗi ở đây.

188
00:13:24,380 --> 00:13:26,830
Vì vậy, trong tập tin index.js,

189
00:13:26,830 --> 00:13:30,090
vì vậy tôi lấy tài sản tin nhắn của đối tượng lỗi

190
00:13:30,090 --> 00:13:33,755
và sau đó in nó ra trên giao diện điều khiển của tôi ở đây.

191
00:13:33,755 --> 00:13:35,310
Vì vậy, nếu một lỗi xảy ra,

192
00:13:35,310 --> 00:13:39,215
tôi sẽ in ra các thông báo lỗi bằng cách sử dụng này.

193
00:13:39,215 --> 00:13:45,820
Và như vậy, đây là cách tôi sẽ xử lý lỗi đã được trả về bởi một hàm callback.

194
00:13:45,820 --> 00:13:51,360
Nếu không, tất nhiên trong trường hợp này,

195
00:13:51,360 --> 00:13:57,450
mô-đun hình chữ nhật đã trả về hàm hình chữ nhật,

196
00:13:57,450 --> 00:14:01,620
đối tượng có chứa chu vi và các chức năng khu vực,

197
00:14:01,620 --> 00:14:08,108
vì vậy tôi có thể đi trước và in ra giá trị đó.

198
00:14:08,108 --> 00:14:14,175
Vì vậy, ở đây, tôi sẽ nói diện tích

199
00:14:14,175 --> 00:14:23,030
của hình chữ nhật có kích thước l bằng,

200
00:14:23,140 --> 00:14:28,270
vì vậy tôi sẽ nói,

201
00:14:29,170 --> 00:14:37,155
và b bằng.

202
00:14:37,155 --> 00:14:40,530
Lý do tại sao tôi xác định nó một cách rõ

203
00:14:40,530 --> 00:14:47,340
ràng sẽ trở nên rất rõ ràng khi chúng ta chạy ví dụ này.

204
00:14:47,340 --> 00:15:01,480
Tôi sẽ nói là hình chữ nhật.

205
00:15:01,480 --> 00:15:04,188
Bây giờ, lưu ý rằng đối với khu vực này,

206
00:15:04,188 --> 00:15:09,555
tôi không gửi bất kỳ tham số nào ở đây bởi vì đi đến giá trị,

207
00:15:09,555 --> 00:15:14,540
chiều dài và hơi thở đã được thông qua ở đây trong l và b,

208
00:15:14,540 --> 00:15:19,065
và những người sẽ có sẵn cho điều này

209
00:15:19,065 --> 00:15:24,245
và ở đây vì đóng cửa mà JavaScript hỗ trợ.

210
00:15:24,245 --> 00:15:27,470
Bởi vì các x và y đã đi vào như các tham số, vì

211
00:15:27,470 --> 00:15:32,710
vậy những người sẽ có thể truy cập ngay ở đó trong chức năng gọi lại này.

212
00:15:32,710 --> 00:15:37,315
Vì vậy, những x_y sẽ được tự động có sẵn cho chúng tôi ở đây.

213
00:15:37,315 --> 00:15:39,890
Vì vậy, như một vấn đề của thực tế,

214
00:15:39,890 --> 00:15:43,970
tôi không cần phải cung cấp các tham số x và y ở đây ở tất cả bởi vì

215
00:15:43,970 --> 00:15:49,090
những x và y sẽ được lấy ra từ x này và y ngay tại đó.

216
00:15:49,090 --> 00:15:53,375
Vì vậy, tôi thậm chí không cần phải vượt qua hai giá trị đó trong đây.

217
00:15:53,375 --> 00:15:55,385
Vì vậy, đó là lý do tại sao, ngay tại đó,

218
00:15:55,385 --> 00:15:57,905
tôi có thể gọi hình chữ nhật.

219
00:15:57,905 --> 00:16:03,170
Và tính toán khu vực này sẽ tự động nhận được l và b đã được thông qua

220
00:16:03,170 --> 00:16:09,505
bởi các cuộc gọi hình chữ nhật để trực tiếp mô-đun nút trước đó.

221
00:16:09,505 --> 00:16:14,980
Vì vậy, đây là sự đóng cửa của JavaScript hoạt động ở đây.

222
00:16:14,980 --> 00:16:17,945
Vì vậy, đó là lần đầu tiên.

223
00:16:17,945 --> 00:16:23,305
Tôi đang in ra khu vực của hình chữ nhật.

224
00:16:23,305 --> 00:16:32,990
Điều tương tự, hãy để tôi in ra các chu vi.

225
00:16:32,990 --> 00:16:34,608
Vì vậy, để in ra các perimeters,

226
00:16:34,608 --> 00:16:36,720
vì vậy tôi sẽ nói console.log.

227
00:16:36,720 --> 00:16:46,560
Chu vi của hình chữ nhật sẽ là chu vi hình chữ nhật.

228
00:16:46,560 --> 00:16:53,280
Bây giờ, tôi phải nói với bạn rằng cách tiếp cận này để thực hiện cần một chút

229
00:16:53,280 --> 00:17:02,335
nỗ lực để hiểu và nội bộ hóa khả năng chức năng không đồng bộ.

230
00:17:02,335 --> 00:17:06,360
Phải mất một thời gian để bạn hoàn toàn hiểu nó thực sự hoạt động như thế nào.

231
00:17:06,360 --> 00:17:08,550
Bây giờ để minh họa thực tế rằng

232
00:17:08,550 --> 00:17:14,642
cuộc gọi hàm này sẽ dẫn đến một cuộc gọi đến mô-đun Node

233
00:17:14,642 --> 00:17:19,280
nhưng phần này sẽ được thực hiện chỉ sau

234
00:17:19,280 --> 00:17:24,830
một sự chậm trễ hai giây vì thực tế là chúng ta đang sử dụng dấu thời gian thiết lập.

235
00:17:24,830 --> 00:17:28,745
Bây giờ, như chúng tôi đã nghiên cứu trong hoạt động không đồng bộ,

236
00:17:28,745 --> 00:17:33,155
bởi vì chúng tôi đã di chuyển ra phía sau xử lý,

237
00:17:33,155 --> 00:17:41,420
hãy để tôi cũng giới thiệu thêm một console.log ở đây để làm cho một điểm.

238
00:17:41,420 --> 00:17:46,175
Vì vậy, chúng tôi sẽ nói tuyên bố này là

239
00:17:46,175 --> 00:17:53,869
sau khi cuộc gọi đến rect.

240
00:17:53,869 --> 00:18:00,210
Lý do tại sao tôi minh họa điểm này là khi bạn phát hành cuộc gọi này,

241
00:18:00,210 --> 00:18:06,130
mã này sẽ không được thực hiện cho đến sau một sự chậm trễ hai giây.

242
00:18:06,130 --> 00:18:08,070
Vì vậy, trong khi chờ đợi,

243
00:18:08,070 --> 00:18:10,360
chức năng của bạn, chức năng chính ở đây,

244
00:18:10,360 --> 00:18:16,340
sẽ tiếp tục và sau đó thực hiện dòng tiếp theo của mã mà bạn thấy ở đây.

245
00:18:16,340 --> 00:18:19,745
Vì vậy, đây là sự tiếp nối mà bạn sẽ thấy ở đây.

246
00:18:19,745 --> 00:18:21,805
Vì vậy, với những thay đổi này,

247
00:18:21,805 --> 00:18:27,815
chúng ta hãy lưu các thay đổi và sau đó nhìn vào cách ứng dụng này thực hiện ngay bây giờ.

248
00:18:27,815 --> 00:18:29,410
Vì vậy, lưu lại những thay đổi.

249
00:18:29,410 --> 00:18:35,220
Hãy đi đến thiết bị đầu cuối và thực hiện ứng dụng nút này.

250
00:18:35,220 --> 00:18:37,570
Bây giờ, đi đến thiết bị đầu cuối, thêm dấu nhắc.

251
00:18:37,570 --> 00:18:43,795
Hãy để tôi gõ npm bắt đầu và bạn sẽ ngay lập tức nhận thấy

252
00:18:43,795 --> 00:18:51,790
rằng giải quyết và tuyên bố này đã được in ra trước đó.

253
00:18:51,790 --> 00:18:54,505
Và sau đó sau sự chậm trễ nhất định này,

254
00:18:54,505 --> 00:18:57,855
khu vực và chu vi đã được in ra.

255
00:18:57,855 --> 00:19:02,130
Vì vậy, đó là một sự chậm trễ hai giây mà chúng tôi giới thiệu bằng cách sử dụng thời gian ra.

256
00:19:02,130 --> 00:19:05,755
Vì vậy, bạn nhận thấy rằng trong phiên bản trước đó,

257
00:19:05,755 --> 00:19:10,290
điều này đã được in và ngay lập tức khu vực và chu vi đã được in ngay dưới đó.

258
00:19:10,290 --> 00:19:15,120
Nhưng bây giờ, chú ý rằng những giá trị này được in ra một chút sau đó.

259
00:19:15,120 --> 00:19:20,460
Vì vậy, ở giữa, chức năng của họ gọi với các tham số khác nhau đã được đi

260
00:19:20,460 --> 00:19:26,505
vào và sau đó các callbacks được gọi trở lại sau hai lần chậm trễ cho mỗi một trong số họ.

261
00:19:26,505 --> 00:19:32,500
Và vì thực tế là có sự đóng cửa mà JavaScript hỗ trợ,

262
00:19:32,500 --> 00:19:35,980
vì vậy các giá trị được thông qua được bảo tồn.

263
00:19:35,980 --> 00:19:38,440
Và vì vậy khi hàm gọi lại được gọi,

264
00:19:38,440 --> 00:19:40,615
giá trị thích hợp được in.

265
00:19:40,615 --> 00:19:42,730
Vì vậy, đó là lý do tại sao bạn thấy rằng khu vực và

266
00:19:42,730 --> 00:19:46,330
chu vi được in chính xác và hai ở

267
00:19:46,330 --> 00:19:48,070
đây, hai báo cáo ở đây,

268
00:19:48,070 --> 00:19:51,340
tương ứng với cuộc gọi đặc biệt này

269
00:19:51,340 --> 00:19:55,100
để trực tiếp với l là bằng hai và b là bằng bốn.

270
00:19:55,100 --> 00:19:56,605
Và sau đó hai,

271
00:19:56,605 --> 00:19:58,150
kế tiếp hai, tất nhiên,

272
00:19:58,150 --> 00:20:05,000
tương ứng với cái đặc biệt này và những cái còn lại như bạn thấy ở đây.

273
00:20:05,000 --> 00:20:10,410
Vì vậy, những gì tôi muốn minh họa là một thực tế rằng khi bạn thực hiện tính toán không đồng bộ, tính toán không

274
00:20:10,410 --> 00:20:12,730
đồng bộ mất thời gian riêng của mình

275
00:20:12,730 --> 00:20:16,270
để trả về giá trị trong khi tính toán chính của bạn

276
00:20:16,270 --> 00:20:22,460
sẽ tiến hành về phía trước mà không cần chờ đợi cho callback được hoàn thành.

277
00:20:22,460 --> 00:20:25,245
Vì vậy, khi bạn cần phải làm một số lượng công việc nhất định,

278
00:20:25,245 --> 00:20:29,365
bạn đã chuyển vào như một callback cho mô-đun khác đó.

279
00:20:29,365 --> 00:20:31,375
Và khi mô-đun khác hoàn thành công việc của nó,

280
00:20:31,375 --> 00:20:35,010
nó sẽ gọi lại và sau đó mã đó sẽ được thực hiện.

281
00:20:35,010 --> 00:20:40,350
Vì vậy, đó là điểm mà tôi đã minh họa bằng cách sử dụng ví dụ này. Một

282
00:20:40,350 --> 00:20:41,565
lần nữa, như tôi đã nói,

283
00:20:41,565 --> 00:20:45,210
điều này cần một chút trí tưởng tượng và sự hiểu biết

284
00:20:45,210 --> 00:20:48,930
để bạn nội bộ hóa cách thức hoạt động này,

285
00:20:48,930 --> 00:20:55,185
nhưng bạn sẽ thấy rằng với Node và cũng Express và khi chúng tôi sử dụng MongoDB,

286
00:20:55,185 --> 00:21:01,785
bạn sẽ thấy kiểu mẫu này lặp đi lặp lại rất thường xuyên trong cách chúng tôi viết mã của chúng tôi.

287
00:21:01,785 --> 00:21:06,210
Vì vậy, với minh họa đơn giản này của callbacks và xử lý lỗi,

288
00:21:06,210 --> 00:21:08,940
chúng tôi hoàn thành bài tập này.

289
00:21:08,940 --> 00:21:13,675
Đây là thời điểm tốt cho bạn để làm một nhận xét get với thông điệp đó,

290
00:21:13,675 --> 00:21:17,700
nút, callbacks, và xử lý lỗi.