ar
Feedback
Asynchronous Programming

Asynchronous Programming

الذهاب إلى القناة على Telegram
2 002
المشتركون
-124 ساعات
-57 أيام
-1730 أيام
أرشيف المشاركات
🧩 Пока я готовлю курс по паттернам GoF, SOLID, GRASP с адаптацией для Node.js и JavaScript, собрал тут ссылки на все старые материалы, видео, примеры кода, задачи, если по ссылке github репозиторий, то часто там и примеры и видео: https://github.com/tshemsedinov/Patterns-JavaScript

💡 Начиная Chrome 119 и Node.js 22 у нас есть 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 });
‣ Значит ли это, что иначе писать уже плохо? Это достаточно редкая и специфическая штука, ее нужно использовать в библиотеках и коде платформ с надеждой на то, что движки будут это как-то дополнительно оптимизировать, а в продуктовом коде нет на вас вины, если пишете по старинке. ‣ Значит ли это, что оно всем нужно? Нет, но если знаете, это плюс.

Если кто хочет предыдущий пост в академическом виде https://youtu.be/9JUY3prnCQ4

💥 Шок! Названа возможная дата КОНЦА Node.js, JavaScript и С++, эксперты раскрыли тайну TypeScript ☠️ https://youtu.be/bRlUtzQPOhA Скандал в твиттере, все, что вы знали про программирование — скоро не будет стоить ничего!!! Когда наш CTO узнал это, то он три раза сбросился с унитаза и съел свою копию "Книжки с кабанчиком". Но я вас полюбил и я вас научу — тут статья «Самые важные знания для программиста» https://x.com/tshemsedinov/status/1809633457754034433

💡 На кого можно подписаться в 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

❓ 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

— Вы там все с ума посходили с этим своим EventEmutter, натуральный goto, это же мерзость, как и все в этом вашем Node.js — Это ты где так от EventEmutter пострадал? Опять CTO заставлял собесы принимать? — Та не, вчера с Васей пиво пили и он мне насвистел... А правда, что у вас даже стримы на гоуту работают?

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

В курсе по асинхронности начинаются более сложные задания. Например: нужно декомпозировать код согласно принципам 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();

photo content
+2

Все время уходил от вопроса, про литературу, которую стоит читать программистам, это потому, что мой список выглядит странно и сложно объяснить, почему не Дядя Боб и не Мартин Фаулер... Они тоже, конечно, полезны, но все же мой список такой: - Рене Декарт - Людвиг Витгенштейн - Ноам Хомский - Кристофер Александер - Алан Тьюринг - Джон фон Нейман - Норберт Винер - Виктор Глушков - Клод Шеннон - Людвиг фон Берталанфи - Стаффорд Бир - Уильям Эшби - Эдсгер Дейкстра - Дональд Кнут Это не так много, и точно более полезно, чем нетфликс и амазон