Page 247 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 247
возможно. Остается только модифицировать нашу функцию так, чтобы использо
вать метод Promise . all.
function* theFutureisNow ( )
const data = yield Promise . a ll ( [
nfc l l ( f s . readFi l e , ' а . tx ' ) ,
a
t
t
nfcall ( f s . readFile, ' b . t x ' ) ,
l
nfca l ( f s . r eadFi e , ' с . tx ' ) ,
t
l
] ) ;
yield ptimeout ( 6 0 * 1 0 0 0 ) ;
yield nfcall ( f s . writeFile, ' d . t x ' , data [ O ] +data [ l ] +data [ 2 ] ) ;
t
Обязательство, возвращенное методом Prom s e . all, представляет собой массив,
i
содержащий значение состояния выполнения каждого обязательства в порядке их
расположения в массиве. Даже при том, что файл с . txt вполне может быть прочитан
[
прежде, чем файл . txt, элемент data О ] будет все еще хранить содержимое . txt,
а
а
а da ta [ 2 ] - содержимое с . txt.
Из этого раздела вам уже должно было стать понятно, что в основе всего лежит
a
i
)
не метод Prom s e . l l (хотя это и весьма удобный инструмент , а то, что следует
учитывать, какие именно части вашей программы могут быть выполнены парал
лельно, а какие не могут. В этом примере вполне можно даже запустить интерваль
ный таймер параллельно с чтением файла: все это зависит от задачи, которую вы
пытаетесь решить. Если важно, чтобы эти три файла были прочитаны, затем про
шло 60 секунд, а затем результат их объединения записан в другой файл, то мы уже
имеем то, что хотим. С другой стороны, нам может понадобиться, чтобы эти три
файла были прочитаны не ранее, чем через 60 секунд, а результат был записан в чет
вертый файл - в этом случае нам нужно переместить установку интервала в метод
Promise . all.
Не п и шите собствен н ых пускателей генераторов
Хотя написание собственного пускателя генератора, как это было сделано с grun,
является хорошим упражнением, в него следовало бы внести много нюансов и усо
вершенствований. Лучше не изобретать колесо. П у скатель генератора со полноце
нен и надежен. Если вы создаете веб-сайты, вам может иметь смысл изучить Коа, ко
торый предназначен для работы с со и позволяет писать веб-обработчики, используя
yield, как в функции theFutureisNow.
Обработка исключений в пускателях генераторов
Другое важное преимущество пускателей генератора состоит в том, что они до
пускают возможность обработки исключений с помощью блоков try/catch. Пом
ните, что при использовании функций обратного вызова и обязательств обработка
250 Глава 14. Асинхронное программирование

