Первое, с чем мы сталкиваемся в 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