Первое, с чем мы сталкиваемся в js
при работе с IO
– это
колбеки, сложность использования которых резко нарастает с увеличением
зависимостей.
import fs from 'fs';
const myFile = '/tmp/test';
fs.readFile(myFile, 'utf8', (err, txt) => {
if (err) {
return console.log(err);
}
const newTxt = `${txt}'\nAppended something!`;
fs.writeFile(myFile, newTxt, err => {
if (err) {
return console.log(err);
}
console.log('Appended text!');
});
});
И мы знаем уже как минимум один способ борьбы с этой сложностью и даже
написали реализацию нескольких функций библиотеки async
.
async.filter(['file1', 'file2'], (filePath, callback) => {
fs.access(filePath, err => {
callback(null, !err)
});
}, (err, results) => {
// results now equals an array of the existing files
});
Этот способ довольно неплох, но обладает рядом недостатков. Один из
основных связан с тем, что необходимо знать большое количество разнообразных
функций на все случаи жизни. Другой – с тем, что комбинирование
функций самой библиотеки async
приводит к громоздкому коду, который, к
тому же, не так просто понимать.
Оказывается, что существует ряд других способов работы с асинхронным кодом, часть из которых может быть реализована без поддержки со стороны языка.
- Promise (Futures)
- Coroutines (using Generators)
- Async/Await
В этом курсе будут подробно рассмотрены перечисленные концепции, которые
стали неотъемлемой частью современной разработки на js
. В процессе
знакомства с ними мы построим библиотеку для выполнения http
запросов.
Она будет основана на промисах, а использовать ее можно будет с генераторами
и async/await конструкциями.
import { get } from 'hexlet-http-request';
export default async () => {
const hostname = 'localhost:3000';
const id = await get(`${hostname}/id`);
const group = await get(`${hostname}/group`);
return get(`${hostname}/${group}/${id}`);
}
Как видите, здесь используется новый синтаксис, но сама структура читается хорошо даже без его знания. Код выглядит линейным и не использует колбеки.
Дополнительно в курсе будет рассмотрен следующий набор тем:
- Формат данных
json
- Итераторы
- Атаки в сети (CSRF)
- Модули
nodejs
:querystring
,url
,http
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты