В курсе по асинхронности начинаются более сложные задания. Например: нужно декомпозировать код согласно принципам SOLID, а имеено Single-Responsibility Principle (SRP) чтобы код не потерял работоспособности, но стал более понятным, каждая функция имела только одну ответственность, и его читаемость и возможность исправления существенно улучшилась:
'use strict';
const API_EXCHANGE = {
host: 'openexchangerates.org',
path: 'api/latest.json?app_id=',
key: '1f43ea96b1e343fe94333dd2b97a109d',
};
const DEFAULT_RETRY = 3;
const getRate = async (currency, retry = DEFAULT_RETRY) => {
console.log({ currency, retry });
const { host, path, key } = API_EXCHANGE;
const url = `https://${host}/${path}${key}`;
const res = await fetch(url).catch(() => ({ ok: false }));
if (!res.ok) {
const attemptsLeft = retry - 1;
if (attemptsLeft > 0) return getRate(currency, retry - 1);
throw new Error('Can not get data');
}
const data = await res.json();
const rate = data.rates[currency];
return rate;
};
const main = async () => {
try {
const rate = await getRate('UAH');
console.log({ rate });
} catch (err) {
console.error({ err });
}
};
main();
🔥17👍10❤3
Patterns for Async & Node.js
Rethinking GRASP, SOLID, and GoF patterns for Frontend & Backend
Опрос для формирования нового курса по переосмыслению принципов GRASP и SOLID, а так же паттернов проектирования (классических GoF и дополнительных), чистой архитектуры и проектирования архитектуры на базе DDD (Domain-driven design) для фронтенд и бекенд инженеров.
10 самых интересных ответов получат мои рекомендации по поднятым темам и ссылки на решения этих проблем из моих открытых и закрытых лекций, семинаров, тренингов, а если нет таких материалов, то я постараюсь ответить лично и привести примеры кода. 👉 https://forms.gle/zE78uTAqKR3GWAoq5
Rethinking GRASP, SOLID, and GoF patterns for Frontend & Backend
Опрос для формирования нового курса по переосмыслению принципов GRASP и SOLID, а так же паттернов проектирования (классических GoF и дополнительных), чистой архитектуры и проектирования архитектуры на базе DDD (Domain-driven design) для фронтенд и бекенд инженеров.
10 самых интересных ответов получат мои рекомендации по поднятым темам и ссылки на решения этих проблем из моих открытых и закрытых лекций, семинаров, тренингов, а если нет таких материалов, то я постараюсь ответить лично и привести примеры кода. 👉 https://forms.gle/zE78uTAqKR3GWAoq5
👍19❤6🔥2🤯1
Forwarded from Metarhia/NodeUA - Node.js Ukraine Community
— Вы там все с ума посходили с этим своим EventEmutter, натуральный goto, это же мерзость, как и все в этом вашем Node.js
— Это ты где так от EventEmutter пострадал? Опять CTO заставлял собесы принимать?
— Та не, вчера с Васей пиво пили и он мне насвистел... А правда, что у вас даже стримы на гоуту работают?
— Это ты где так от EventEmutter пострадал? Опять CTO заставлял собесы принимать?
— Та не, вчера с Васей пиво пили и он мне насвистел... А правда, что у вас даже стримы на гоуту работают?
🤣15🤯2🎉1💩1
❓ Interview questions on asynchronous programming, this is the first version, published for corrections and improvements, you can suggest your fixes here: https://github.com/tshemsedinov/Async-Interview-Questions
GitHub
GitHub - tshemsedinov/Async-Interview-Questions: Asynchronous programming Interview Questions
Asynchronous programming Interview Questions . Contribute to tshemsedinov/Async-Interview-Questions development by creating an account on GitHub.
👍7❤1🔥1
💡 На кого можно подписаться в Github:
1. Маттео Калина https://github.com/mcollina
2. Джеймс Снелл https://github.com/jasnell
3. Ден Абрамов https://github.com/gaearon
4. Анна Хеннингсен https://github.com/addaleax
5. Рик Тротт https://github.com/Trott
6. Илья Климов https://github.com/xanf
7. Андрей Ситник https://github.com/ai
8. Федор Индутный https://github.com/indutny
9. Линус Торвальдс https://github.com/torvalds
10. Дуглас Крокфорд https://github.com/douglascrockford
11. Брендон Эйх https://github.com/BrendanEich
12. Андерс Хейлсберг https://github.com/ahejlsberg
🖼 А тут еще профили контрибьторов, менторов и выпускников Метархии:
1. Алексей Орленко https://github.com/aqrln
2. Дмитрий Нечай https://github.com/nechaido
3. Денис Отришко https://github.com/lundibundi
4. Николай Белочуб https://github.com/belochub
5. Георг Ольденбургер https://github.com/georgolden
6. Владислав Духин https://github.com/primeare
7. Иван Тимошенко https://github.com/ivan-tymoshenko
8. Лидия Иванова https://github.com/lidaamber
9. Алексей Голиков https://github.com/agil
10. Артем Черненький https://github.com/GYFK
11. Андрей Высоцкий https://github.com/Gagnant
12. Сергей Нановский https://github.com/snanovskyi
13. Влад Дзюба https://github.com/DzyubSpirit
14. Роман Огиевич https://github.com/rohiievych
15. Диана Болотенюк https://github.com/mille-nium
16. Дмитрий Михайлов https://github.com/Tariod
17. Илья Федорович https://github.com/Kowalski0805
18. Алина Листунова https://github.com/alinkedd
19. Даниил Гуськов https://github.com/imnetcat
20. Алексей Румянцев https://github.com/o-rumiantsev
21. Виталий Кухар https://github.com/vkukh
И если кто еще не подписан на меня, то вот мой профиль:
👉 Тимур Шемсединов https://github.com/tshemsedinov
1. Маттео Калина https://github.com/mcollina
2. Джеймс Снелл https://github.com/jasnell
3. Ден Абрамов https://github.com/gaearon
4. Анна Хеннингсен https://github.com/addaleax
5. Рик Тротт https://github.com/Trott
6. Илья Климов https://github.com/xanf
7. Андрей Ситник https://github.com/ai
8. Федор Индутный https://github.com/indutny
9. Линус Торвальдс https://github.com/torvalds
10. Дуглас Крокфорд https://github.com/douglascrockford
11. Брендон Эйх https://github.com/BrendanEich
12. Андерс Хейлсберг https://github.com/ahejlsberg
1. Алексей Орленко https://github.com/aqrln
2. Дмитрий Нечай https://github.com/nechaido
3. Денис Отришко https://github.com/lundibundi
4. Николай Белочуб https://github.com/belochub
5. Георг Ольденбургер https://github.com/georgolden
6. Владислав Духин https://github.com/primeare
7. Иван Тимошенко https://github.com/ivan-tymoshenko
8. Лидия Иванова https://github.com/lidaamber
9. Алексей Голиков https://github.com/agil
10. Артем Черненький https://github.com/GYFK
11. Андрей Высоцкий https://github.com/Gagnant
12. Сергей Нановский https://github.com/snanovskyi
13. Влад Дзюба https://github.com/DzyubSpirit
14. Роман Огиевич https://github.com/rohiievych
15. Диана Болотенюк https://github.com/mille-nium
16. Дмитрий Михайлов https://github.com/Tariod
17. Илья Федорович https://github.com/Kowalski0805
18. Алина Листунова https://github.com/alinkedd
19. Даниил Гуськов https://github.com/imnetcat
20. Алексей Румянцев https://github.com/o-rumiantsev
21. Виталий Кухар https://github.com/vkukh
И если кто еще не подписан на меня, то вот мой профиль:
👉 Тимур Шемсединов https://github.com/tshemsedinov
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥6❤5
💥 Шок! Названа возможная дата КОНЦА Node.js, JavaScript и С++, эксперты раскрыли тайну TypeScript ☠️ https://youtu.be/bRlUtzQPOhA
Скандал в твиттере, все, что вы знали про программирование — скоро не будет стоить ничего!!! Когда наш CTO узнал это, то он три раза сбросился с унитаза и съел свою копию "Книжки с кабанчиком". Но я вас полюбил и я вас научу — тут статья «Самые важные знания для программиста» https://x.com/tshemsedinov/status/1809633457754034433
Скандал в твиттере, все, что вы знали про программирование — скоро не будет стоить ничего!!! Когда наш CTO узнал это, то он три раза сбросился с унитаза и съел свою копию "Книжки с кабанчиком". Но я вас полюбил и я вас научу — тут статья «Самые важные знания для программиста» https://x.com/tshemsedinov/status/1809633457754034433
YouTube
💥 Шок! Названа возможная дата КОНЦА Node.js, JavaScript и С++, эксперты раскрыли тайну TypeScript ☠️
Скандал в твиттере, все, что вы знали про программирование — скоро не будет стоить ничего!!! Когда наш CTO узнал это, то он три раза сбросился с унитаза и съел свою копию "Книжки с кабанчиком". Но я вас полюбил и я вас научу — тут статья «Самые важные знания…
🤣21💩7👍4❤3🔥1
Если кто хочет предыдущий пост в академическом виде https://youtu.be/9JUY3prnCQ4
YouTube
Мономорфный и полиморфный код, инлайн-кэш, скрытые классы в JavaScript
Примеры: https://github.com/HowProgrammingWorks/Monomorphism
Структура курса: https://github.com/HowProgrammingWorks/Index/blob/master/IP9X.md
Структура курса: https://github.com/HowProgrammingWorks/Index/blob/master/IP9X.md
❤9👍4🔥4
Forwarded from HowProgrammingWorks - JavaScript and Node.js Programming
💡 Начиная Chrome 119 и Node.js 22 у нас есть
Для чего оно нужно? Представьте, что у нас есть какое-то callback-returning API или EventEmitter/EventTarget или другие абстракции, поведения которых нужно подождать. И вот нужно сделать адаптер, обертку с внешним Promise-returning интерфейсом.
Пример:
Раньше это могло выглядеть так:
Или так:
Но теперь withResolvers позволяют это написать проще
‣ Значит ли это, что иначе писать уже плохо?
Это достаточно редкая и специфическая штука, ее нужно использовать в библиотеках и коде платформ с надеждой на то, что движки будут это как-то дополнительно оптимизировать, а в продуктовом коде нет на вас вины, если пишете по старинке.
‣ Значит ли это, что оно всем нужно?
Нет, но если знаете, это плюс.
Promise.withResolvers();
Для чего оно нужно? Представьте, что у нас есть какое-то callback-returning API или EventEmitter/EventTarget или другие абстракции, поведения которых нужно подождать. И вот нужно сделать адаптер, обертку с внешним Promise-returning интерфейсом.
Пример:
const sumAsync = (a, b, callback) => {
if (typeof a !== 'number') return;
if (typeof b !== 'number') return;
setImmediate(() => {
callback(a + b);
});
};
Раньше это могло выглядеть так:
let resolve, reject;
const promise = new Promise((resolved, rejected) => {
resolve = resolved;
reject = rejected;
});
setTimeout(reject, 1000, new Error('Timed out'));
sumAsync(2, 3, resolve);
const result = await promise;
console.log({ result });
Или так:
const promise = new Promise((resolve, reject) => {
sumAsync(4, 5, resolve);
setTimeout(reject, 1000, new Error('Timed out'));
});
const result = await promise;
console.log({ result });
Но теперь withResolvers позволяют это написать проще
const { promise, resolve, reject } = Promise.withResolvers();
setTimeout(reject, 1000, new Error('Timed out'));
sumAsync(6, 7, resolve);
const result = await promise;
console.log({ result });
‣ Значит ли это, что иначе писать уже плохо?
Это достаточно редкая и специфическая штука, ее нужно использовать в библиотеках и коде платформ с надеждой на то, что движки будут это как-то дополнительно оптимизировать, а в продуктовом коде нет на вас вины, если пишете по старинке.
‣ Значит ли это, что оно всем нужно?
Нет, но если знаете, это плюс.
👍14🔥7
🧩 Пока я готовлю курс по паттернам GoF, SOLID, GRASP с адаптацией для Node.js и JavaScript, собрал тут ссылки на все старые материалы, видео, примеры кода, задачи, если по ссылке github репозиторий, то часто там и примеры и видео: https://github.com/tshemsedinov/Patterns-JavaScript
🔥18👍9❤3