All language subtitles for 19. Error Handling With try...catch

af Afrikaans
ak Akan
sq Albanian
am Amharic
ar Arabic
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bem Bemba
bn Bengali
bh Bihari
bs Bosnian
br Breton
bg Bulgarian
km Cambodian
ca Catalan
ceb Cebuano
chr Cherokee
ny Chichewa
zh-CN Chinese (Simplified)
zh-TW Chinese (Traditional)
co Corsican
hr Croatian
cs Czech
da Danish
nl Dutch
en English
eo Esperanto
et Estonian
ee Ewe
fo Faroese
tl Filipino
fi Finnish
fr French
fy Frisian
gaa Ga
gl Galician
ka Georgian
de German
el Greek
gn Guarani
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ia Interlingua
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
rw Kinyarwanda
rn Kirundi
kg Kongo
ko Korean
kri Krio (Sierra Leone)
ku Kurdish
ckb Kurdish (Soranî)
ky Kyrgyz
lo Laothian
la Latin
lv Latvian
ln Lingala
lt Lithuanian
loz Lozi
lg Luganda
ach Luo
lb Luxembourgish
mk Macedonian
mg Malagasy
ms Malay
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mfe Mauritian Creole
mo Moldavian
mn Mongolian
my Myanmar (Burmese)
sr-ME Montenegrin
ne Nepali
pcm Nigerian Pidgin
nso Northern Sotho
no Norwegian
nn Norwegian (Nynorsk)
oc Occitan
or Oriya
om Oromo
ps Pashto
fa Persian Download
pl Polish
pt-BR Portuguese (Brazil)
pt Portuguese (Portugal)
pa Punjabi
qu Quechua
ro Romanian
rm Romansh
nyn Runyakitara
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
sh Serbo-Croatian
st Sesotho
tn Setswana
crs Seychellois Creole
sn Shona
sd Sindhi
si Sinhalese
sk Slovak
sl Slovenian
so Somali
es Spanish
es-419 Spanish (Latin American)
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
tt Tatar
te Telugu
th Thai
ti Tigrinya
to Tonga
lua Tshiluba
tum Tumbuka
tr Turkish
tk Turkmen
tw Twi
ug Uighur
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
wo Wolof
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu
Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated: 1 1 00:00:01,210 --> 00:00:04,240 In this lecture, we're gonna learn how error handling 2 2 00:00:04,240 --> 00:00:06,930 works with a sinc/await. 3 3 00:00:06,930 --> 00:00:10,423 So with a sinc/await, we can't use the catch method 4 4 00:00:10,423 --> 00:00:13,470 that we use before, because we can really 5 5 00:00:13,470 --> 00:00:16,170 attach it anywhere, right. 6 6 00:00:16,170 --> 00:00:20,383 So instead, we use something called a try catch statement. 7 7 00:00:22,270 --> 00:00:25,650 And the try catch statement is actually used 8 8 00:00:25,650 --> 00:00:28,390 in regular JavaScript as well. 9 9 00:00:28,390 --> 00:00:32,170 So it's been in the language probably since the beginning. 10 10 00:00:32,170 --> 00:00:35,820 So try catch has nothing to do with a sinc/await. 11 11 00:00:35,820 --> 00:00:40,390 But we can still use it to catch errors in async functions. 12 12 00:00:40,390 --> 00:00:44,200 But before we do that, let's look at a more simple example, 13 13 00:00:44,200 --> 00:00:47,470 just to see how try catch works. 14 14 00:00:47,470 --> 00:00:52,470 So we can basically wrap all our code in a try block. 15 15 00:00:53,000 --> 00:00:54,850 And so JavaScript will then 16 16 00:00:54,850 --> 00:00:57,890 basically try to execute this code. 17 17 00:00:57,890 --> 00:01:01,650 So just as normal code, so let's just create 18 18 00:01:01,650 --> 00:01:06,143 a variable here, set it to one, create another one. 19 19 00:01:07,280 --> 00:01:09,180 So this one is a constant. 20 20 00:01:09,180 --> 00:01:14,180 And now my goal was to reassign y, but I will accidentally, 21 21 00:01:16,700 --> 00:01:19,340 let's say reassign x. 22 22 00:01:19,340 --> 00:01:23,220 And so that should then give us an error. 23 23 00:01:23,220 --> 00:01:25,840 Because of course, that is not legal. 24 24 00:01:25,840 --> 00:01:28,160 So we can reassign a constant. 25 25 00:01:28,160 --> 00:01:30,713 And so for now, if we reload at this point, 26 26 00:01:31,760 --> 00:01:33,740 first, we get this error, 27 27 00:01:33,740 --> 00:01:35,653 that we are missing the catch block. 28 28 00:01:36,850 --> 00:01:41,687 So let's actually first do this here without any block. 29 29 00:01:43,000 --> 00:01:46,060 And so here, of course, we get the error assignment 30 30 00:01:46,060 --> 00:01:49,790 to constant variable. Right. 31 31 00:01:49,790 --> 00:01:52,230 But let's go back. And so now here, 32 32 00:01:52,230 --> 00:01:54,193 we can add the catch block. 33 33 00:01:55,610 --> 00:01:58,450 So we have a catch block, and this catch block 34 34 00:01:58,450 --> 00:02:01,000 will have access to whatever error 35 35 00:02:01,000 --> 00:02:03,653 occurred here in the try block. 36 36 00:02:05,110 --> 00:02:08,280 And so now we can do something with this error. 37 37 00:02:08,280 --> 00:02:11,633 So let's say we simply want to alert the error, 38 38 00:02:13,000 --> 00:02:14,300 or just the error message. 39 39 00:02:15,330 --> 00:02:18,740 So as we know, any error has the message property. 40 40 00:02:18,740 --> 00:02:23,220 And so we can simply alert that one. So let's see. 41 41 00:02:23,220 --> 00:02:25,480 And indeed, now we get an assignment 42 42 00:02:25,480 --> 00:02:28,560 to constant variable here in this alert. 43 43 00:02:28,560 --> 00:02:31,000 And you see that the error now no longer 44 44 00:02:31,000 --> 00:02:33,800 appears down here in the console. 45 45 00:02:33,800 --> 00:02:37,530 So the script does no longer die in this case. 46 46 00:02:37,530 --> 00:02:41,090 And instead, we can simply catch the error right here, 47 47 00:02:41,090 --> 00:02:45,140 and then handle it accordingly. Now, okay. 48 48 00:02:45,140 --> 00:02:48,030 And of course, if there is no error at all, 49 49 00:02:48,030 --> 00:02:51,000 so if I was assigning y correctly, 50 50 00:02:51,000 --> 00:02:54,020 then we would get no error. 51 51 00:02:54,020 --> 00:02:56,823 Well, at least not coming from the try catch block. 52 52 00:02:58,780 --> 00:03:00,023 So now we're good. 53 53 00:03:02,060 --> 00:03:06,930 But anyway, this year is just a stupid syntax error. 54 54 00:03:06,930 --> 00:03:09,850 And of course, we're not going to use try catch 55 55 00:03:09,850 --> 00:03:12,930 to find mistakes that we make in our code. 56 56 00:03:12,930 --> 00:03:16,800 And so let's know use try catch for something more useful, 57 57 00:03:16,800 --> 00:03:21,800 which is to actually handle real errors in async functions. 58 58 00:03:21,810 --> 00:03:25,990 Okay. So just like in the small example that we saw, 59 59 00:03:25,990 --> 00:03:29,750 let's wrap our entire code of this function 60 60 00:03:29,750 --> 00:03:33,800 into a try block. All right, 61 61 00:03:33,800 --> 00:03:38,313 so curly braces, and then try like this. 62 62 00:03:40,070 --> 00:03:44,190 All right, and then down here after that, 63 63 00:03:44,190 --> 00:03:47,680 the catch block, which remember, has access 64 64 00:03:47,680 --> 00:03:51,040 to whatever error occurs in the try block. 65 65 00:03:51,040 --> 00:03:52,750 And so here in this catch block, 66 66 00:03:52,750 --> 00:03:54,800 we can now handle any errors, 67 67 00:03:54,800 --> 00:03:57,653 just like we did before in the catch method. 68 68 00:03:59,840 --> 00:04:02,773 So let's log the error to the console. 69 69 00:04:04,280 --> 00:04:07,773 Give it a safe year, just to format it a little bit better. 70 70 00:04:09,090 --> 00:04:10,890 Now, right, and so you see that 71 71 00:04:10,890 --> 00:04:12,773 the code still works the same. 72 72 00:04:13,870 --> 00:04:17,203 But that's because we didn't cause any error yet. 73 73 00:04:18,630 --> 00:04:22,570 But let's also now log the error message. 74 74 00:04:22,570 --> 00:04:25,483 But let's now also render the error. 75 75 00:04:26,420 --> 00:04:29,740 And so instead of going search that, 76 76 00:04:29,740 --> 00:04:32,083 I will simply write some new error message. 77 77 00:04:33,410 --> 00:04:38,393 So if something went wrong, then we had this emoji here. 78 78 00:04:39,540 --> 00:04:43,803 And then again, the error dot message. 79 79 00:04:45,340 --> 00:04:48,710 Okay, and so now let's try again, 80 80 00:04:48,710 --> 00:04:52,143 to force an error here by reloading really fast. 81 81 00:04:53,970 --> 00:04:56,260 Maybe the easiest way is to simply 82 82 00:04:56,260 --> 00:04:58,093 call this function multiple times. 83 83 00:05:05,538 --> 00:05:09,560 And now, and now you see, we get some nice errors here. 84 84 00:05:09,560 --> 00:05:11,700 Well, they're not really so nice. 85 85 00:05:11,700 --> 00:05:13,823 So let's see where they actually start. 86 86 00:05:17,860 --> 00:05:19,193 Well, for some reason, 87 87 00:05:20,520 --> 00:05:22,383 everything looks the same as before. 88 88 00:05:23,420 --> 00:05:27,683 And that's, of course, secrets render error, 89 89 00:05:29,010 --> 00:05:31,890 until it actually also add an emoji, 90 90 00:05:31,890 --> 00:05:35,520 just so we can see that it's our own error, 91 91 00:05:35,520 --> 00:05:39,053 or basically, that we are logging the error ourselves. 92 92 00:05:42,092 --> 00:05:42,925 Okay. 93 93 00:05:47,870 --> 00:05:50,163 So let's do this. Ah, here we go. 94 94 00:05:51,470 --> 00:05:54,413 Whoa. So we get a lot of different errors here. 95 95 00:05:56,120 --> 00:05:58,920 So that's a couple of times. 96 96 00:05:58,920 --> 00:06:01,180 And so the reason for that is that we are calling 97 97 00:06:01,180 --> 00:06:03,670 this function here multiple times, 98 98 00:06:03,670 --> 00:06:05,863 and therefore we get multiple errors. 99 99 00:06:07,040 --> 00:06:10,410 But the error that gets logged here to the console, 100 100 00:06:10,410 --> 00:06:14,790 remember is the one that is coming because of this 404 error 101 101 00:06:14,790 --> 00:06:18,163 that the country cannot be found. Okay. 102 102 00:06:19,260 --> 00:06:22,250 So at this point, we do have some error handling. 103 103 00:06:22,250 --> 00:06:27,090 So we are able to add the error here to the user interface. 104 104 00:06:27,090 --> 00:06:31,370 But just like before, this error is not really meaningful, 105 105 00:06:31,370 --> 00:06:36,370 because the fetch promise does not reject on a 404 error, 106 106 00:06:36,390 --> 00:06:40,970 or on a 403 error, which was actually the original error, 107 107 00:06:40,970 --> 00:06:44,920 which caused everything here to collapse. Right? 108 108 00:06:44,920 --> 00:06:47,740 So again, the four three is because 109 109 00:06:47,740 --> 00:06:52,740 we are doing too many requests to the reverse geocoding API. 110 110 00:06:53,010 --> 00:06:54,780 But the solution is simple, 111 111 00:06:54,780 --> 00:06:57,800 because it's exactly the same as before. 112 112 00:06:57,800 --> 00:07:01,200 So all we have to do is to manually create an error. 113 113 00:07:01,200 --> 00:07:03,640 And so that error will then be caught 114 114 00:07:03,640 --> 00:07:06,633 here in the catch block. Right? 115 115 00:07:07,490 --> 00:07:12,490 So let's do that. So right here. So basically, 116 116 00:07:12,700 --> 00:07:15,420 immediately after this fetch, 117 117 00:07:15,420 --> 00:07:16,840 and so just like before, 118 118 00:07:16,840 --> 00:07:20,233 we can test for the okay property, remember. 119 119 00:07:22,700 --> 00:07:25,370 So I'm not going to show that again here, 120 120 00:07:25,370 --> 00:07:27,403 because we already saw it before. 121 121 00:07:28,390 --> 00:07:32,240 So this response here will have the okay property. 122 122 00:07:32,240 --> 00:07:34,790 And if dad is not set to true, well, 123 123 00:07:34,790 --> 00:07:36,733 then we want to throw a new error. 124 124 00:07:40,720 --> 00:07:45,720 So that's problem getting, let's see location, data. 125 125 00:07:49,570 --> 00:07:52,570 Okay. And so this one basically handles 126 126 00:07:52,570 --> 00:07:55,530 any error in this fetch. 127 127 00:07:55,530 --> 00:07:57,563 And so now the same here. 128 128 00:07:58,820 --> 00:08:02,540 So let's say that we come back with a real weird country, 129 129 00:08:02,540 --> 00:08:04,420 from this fetch. 130 130 00:08:04,420 --> 00:08:06,590 Now to then the second API 131 131 00:08:06,590 --> 00:08:10,173 cannot find any country for that name. 132 132 00:08:11,180 --> 00:08:14,803 And so here, let's just say problem getting country. 133 133 00:08:17,570 --> 00:08:21,330 Now, for this first promise here, this one, 134 134 00:08:21,330 --> 00:08:24,370 we do not need to throw an error manually, 135 135 00:08:24,370 --> 00:08:26,510 because in the case that something goes wrong 136 136 00:08:26,510 --> 00:08:29,800 with the geolocation, we already built our promise 137 137 00:08:29,800 --> 00:08:33,390 so that it automatically rejects in that case. 138 138 00:08:33,390 --> 00:08:36,600 And so in this case, we will then immediately get an error, 139 139 00:08:36,600 --> 00:08:39,790 which will get caught in the catch block. 140 140 00:08:39,790 --> 00:08:42,720 But as we already know, the same is not true 141 141 00:08:42,720 --> 00:08:45,230 for the promise coming from fetch. 142 142 00:08:45,230 --> 00:08:47,380 So that promise only gets rejected 143 143 00:08:47,380 --> 00:08:49,980 when the user has no internet connection. 144 144 00:08:49,980 --> 00:08:54,180 But in case of a four, three error, or a 404 error, 145 145 00:08:54,180 --> 00:08:56,390 the fetch promise does not reject. 146 146 00:08:56,390 --> 00:09:00,400 And so again, we do that manually, right here, 147 147 00:09:00,400 --> 00:09:02,270 and also right here. 148 148 00:09:02,270 --> 00:09:05,450 And so here, we already see that it worked. 149 149 00:09:05,450 --> 00:09:08,130 So here, indeed, we got something went wrong 150 150 00:09:08,130 --> 00:09:11,770 problem getting a location, and then again, 151 151 00:09:11,770 --> 00:09:12,973 here, the same error. 152 152 00:09:14,570 --> 00:09:17,623 So here, maybe we don't want all of this error message. 153 153 00:09:18,610 --> 00:09:20,610 Let's just take this one out. 154 154 00:09:20,610 --> 00:09:22,670 So that we just have the emoji, 155 155 00:09:22,670 --> 00:09:25,760 and then the error message itself. 156 156 00:09:25,760 --> 00:09:28,423 So the one that we defined here, and here. 157 157 00:09:30,500 --> 00:09:31,333 All right. 158 158 00:09:32,450 --> 00:09:35,140 So let's see if this triggers an error. 159 159 00:09:35,140 --> 00:09:37,200 And yeah, for one of them, we now 160 160 00:09:37,200 --> 00:09:40,210 have problem getting location data. 161 161 00:09:40,210 --> 00:09:43,883 So an error triggered by this one. All right. 162 162 00:09:45,310 --> 00:09:49,610 So that is the complete version now of this async function, 163 163 00:09:49,610 --> 00:09:53,810 complete with a pretty robust error handling strategy. 164 164 00:09:53,810 --> 00:09:57,310 So again, please never ignore handling errors, 165 165 00:09:57,310 --> 00:10:00,330 especially when it comes to asynchronous code 166 166 00:10:00,330 --> 00:10:02,600 like this one, because here, 167 167 00:10:02,600 --> 00:10:05,670 there is always a lot of stuff that can go wrong. 168 168 00:10:05,670 --> 00:10:09,530 And so our application needs to be ready to handle that. 169 169 00:10:09,530 --> 00:10:11,660 Now, right? But with that being said, 170 170 00:10:11,660 --> 00:10:14,870 in the next lecture, we're going to dive even deeper 171 171 00:10:14,870 --> 00:10:17,760 into how async functions really work. 172 172 00:10:17,760 --> 00:10:20,053 And so let's go there right away. 15231

Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.