Page 248 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 248
исключений довольно проблематична. Г е нерирование исключения в функции обрат
ного вызова не может быть обработано за пределами этой функции. У пускателей
генератора, поскольку они допускают синхронную семантику при все еще асинхрон
ном выполнении, есть дополнительное преимущество при работе с try/catch. Да
вайте добавим в нашу функцию theFutureisNow несколько обработчиков исключе
ний.
function* theFutureisNow ( )
t
let da a ;
try
data = yield Promise . a ll ( [
nfcall f s . readFile , ' а . tx ' ) ,
(
t
t
nfcall ( fs . readFil e , ' Ь . tx ' ) ,
t
nfcall ( fs . readFil e , ' с . tx ' ) ,
] ) ;
catch ( e r r ) {
conso e . error ( "Oшибкa при чтении файлов : " + err . m essag ) ;
e
l
throw err;
yield ptimeout ( 6 0 * 1 0 0 0 ) ;
try {
t
[
[
yield nfcall f s . writeFile, ' d . tx ' , data 0 ] +data 1 ] +data 2 ] ) ;
(
[
catch ( e rr) {
console . e rror ( " Oшибкa при записи файла : " + err . m essag ) ;
e
throw err;
Я не утверждаю, что обработка исключений с помощью конструкции try . .
.
catch непременно превосходит обработчики catch в обязательствах или функции
обратного вызова с первым аргументом для передачи ошибки, но это хорошо по
нятый механизм для обработки исключений, и если вы предпочитаете синхронную
семантику, то можете использовать ее для обработки исключений.
Заключ е н и е
Полное понимание сложностей асинхронного программирования (и различных
механизмов, выработанных для управления им) критически важно для понимания
современной разработки на JavaScript. В этой главе мы изучили следующие вопросы.
• Управление асинхронным выполнением в JavaScript осуществляется функция
ми обратного вызова.
• Обязательства не заменяют обратные вызовы; на самом деле они требуют
функций обратного вызова then и catch.

