TDD в JavaScript. Создаем свой класс Promise

preview_player
Показать описание
Получить профессию Frontend разработчика -

Подробнее узнать об обучении в Result School -

Я в соц сетях:

Мои паблики по JavaScript:

JavaScript cообщества:

Roadmap по каналу:

TDD (Test-Driven Development) на примере создания своего класса Promise с Jest

Перед просмотром роликом рекомендую ознакомиться с:

Исходный код в телеграм канале:

#promise #tdd #javascript
Рекомендации по теме
Комментарии
Автор

Куда это самолёты и вертолёты собрались?!

hutoryanin
Автор

Большое спасибо за урок! Я не очень хорошо понимал промисы, теперь намного лучше стал понимать, как это работает.

Fovaxus
Автор

Владилен, справедливость ради, стоит отметить, что данный пример лишь интерфейсом напоминает промисы, кроме того он полностью синхронный.

zurkevich
Автор

Хотелось бы услышать что-то на тему подхода к тестированию фронтенда и spa в целом. Когда прибегать к юнит-тестам, когда - к е2е тестам. Стоит ли тестировать компоненты, например, в реакте с помощью специальных библиотек (enzyme, react testing library), если да, то какую логику стоит тестировать, какую нет. Или, может быть, вообще отказаться от тестирования интерфейса с помощью юнит-тестов, использовать для этого только е2е тесты, а юнит-тестами покрывать только бизнес-логику. О чем Ваш опыт говорит, какие подходы применяются на практике

kombuchamp
Автор

Нашёл)
Спасибо за ролик! Уникально, доходчиво, полезно)

AtlantZ
Автор

Владилен, спасибо огромное! Все видео на канале нереально полезны мне!

МаринаГуд-кг
Автор

Все идеально, но вот если сразу вызвать resolve в Promise, то у вас не сработает, queue будет пустой

romandeveloper
Автор

Владилен, а можешь мини-гайд по вебшторму? Чтоб также ссылаться на него в следующих курсах и не отвлекаться/извиняться за его использование))

eamarc
Автор

Объясните что происходит с data в onResolve? Мы её переопределяем когда вызываем callback, а как она потом оказывается в следующем then?

daniilrozyev
Автор

test('should get data in then block and chain them', async () => {
const result = await promise.then(num => num).then(num => num * 2)
что происходит, когда мы приписываем await?
* 2)
})

ildarbagamanshin
Автор

data = callback(data)
вот это не понятно, что за магия : )

Если правильно понял, то data возвращается значение из callback и следующий callback вызывается с уже измененной data. В общем какой-то сокращенный синтаксис получается

mishagarkach
Автор

Супер полезный ролик, не потому что про тдд, а потому что раскрывает мощь JavaScript. Респект Владилену!

ezizkurbannazarov
Автор

если resolve не обернут в setTimeout (тобишь нет задержки) то then промиса отрабатывать не будут, А у базового класса промис он будет отрабатывать. Как работает этот механизм?

magomedmakhmudov
Автор

Какие еще подобные темы разобрать? Пиши в комментариях

VladilenMinin
Автор

Круто. Про тесты было очень познавательно.
Спасибо.

entrey_ua
Автор

Промисы никак не помогают и не облегчают. Все что они делают - переупаковка и перемещения кода из внутри блока до после блока. Но это не решает проблему, если нужно обработать срабатывания события и срабатывания ошибки. Будет розростатся все то же лахматое дерево. И никакой пользы от промис. Польза есть, если у нас не будет обрабатываться ошибка. Вот вам пример, а то вы все играетесь в детские игрушки "Хело Ворлд"... Итак задача.
Будем перебрасывать фотки из одного сервера на третий с помощю другого с целью разрузить платный сервер и не выходить за квоты.
1. Получить из базы данных MySQL запись row записи, в которой поле "отмечено=0" (асинхронно)
2. Достать из row список url на фотографии, которые нужно перенести на другой сервер (синхронно)
3. Работаем с одной фотографией
3.1. Download по URL. Качаем из сервера №1 на комп№2. На №2 же и запущена программа (синхронно)
3.2. Проверяем по FTP существования папки н компе №3. Если папки нет - создать. (асинхронно + рекурсия)
3.3. UPLOAD файла на комп3 по ftp (асинхронно)
4. Update row в mysql таблице set replace(старое значение на новое)
5. Если все фотографии перенесены, тогда поле "отмечено=1"
Цыкл

Вроде бы не много, но:
1. NodeJS никому не советую для даже средних проектов. Это недоязык! Вы убедитесь в этом, когда попробуете сделать не ХелоВорлд
2. Подключаемым require из npm (git) нельзя верить и опиратся как на фундамент. Очень жосткие косяки и баги есть и в MySQL и FTP и в JSON парсера и даже при обычной загрузке информации по типу GET черз request.
3. Даже соблюдая все правила асинхронности приложения может по безпределу остановиться. Например с MySQL был такой прикол, что после остановки приложение не может запустится, а если подождать 20-30 секунд, снова обработает несколько sql запросов и снова повиснет. Я не нашел этому никакого обяснения.

Эфект паравозика собый типа аля Промис лично я делаю через таймер. Для этого создаю переменную, которая помнит режим куда нам можно войти. Дальше включается таймер и запускается одна функция, в которой есть набор правил:
если режим==1 делаем 1, меняем на режим 2, уходим
если режим==2 делаем 2, меняем на режим 3, уходим
Такая логика будет работать везде отлично, даже на Ардуино

KlinovAS
Автор

TDD отличная тема, спасибо. Можно ещё больше TDD

replicant
Автор

на 2:50 при npm init -y уже выходит ошибка, помогите что делать?

ardakrakhmetov
Автор

Искусственный интеллект, машинное обучение

reuvenyanturin
Автор

А как же возвращение промиса в методе then, что бы сам метод then этот промис возвращал, а не this.

macsik