TGViewer
Node.js Recipes Node.js Recipes @node_recipes · 3.1K subscribers
Post #600 3.54K
Як уникнути Race Conditions у JavaScript коді?
#worth_seeing

Цього тижня з консалтингу був цікавий баг. Проблему ілюструє такий код:
import { scheduler } from 'node:timers/promises';

async function countLikes() {
const postIds = [1, 2, 3];
let likes = 0;
await Promise.all(
postIds.map(async (id) => {
likes += await fetchLikes(id);
})
);
return likes;
}

async function fetchLikes(id: number) {
await scheduler.wait(Math.random() * 1000);
return id;
}
Очікуваний результат виконання функції countLikes це 6, але в коді є Race Condition. Щоб його виправити необхідно замінити likes += await fetchLikes(id) на
const count = await fetchLikes(id);
likes += count;

Щоб уникати таких випадків існує eslint правило require-atomic-updates. Воно за замовчуванням вимкнено у eslint:recommended . Як правило воно надто суворе, оскільки змушує писати код у Defensive programming style. Особисто мені це не зручно, тому я тримаю його вимкненим, але час від часу вмикаю його, щоб переглянути ризиковані місця.

Академічно правильний спосіб боротьби з Race Conditions є у доповіді Тимура Шемседінова Web Locks API in Node.js and browser.
  • 👍 50
  • ❤ 9
More from @node_recipes
  1. Jan 5, 2026По всьому світу проходять Cursor Meetups, де локальні спільноти діляться досвідом використ…
  2. Jan 5, 2026Думки на вихідних: Full Stack Learning Подивився останнє відео Сергія Немчинського про фул…
  3. Dec 31, 2025Залишаються лічені години 2025-го. І будьмо чесними: сам перехід на 2026-й нічого автомати…
  4. Dec 25, 2025Моє відкриття 2025 року, як доповідача, це Napkin.ai. На малюнку приклад того, як Napkin г…
  5. Dec 23, 2025А ось й ChatGPT додав 2025 review feature. Авжеж в мене half coded Nest.js app, як ще :)
  6. Dec 23, 2025Моє технічне відкриття 2025 року — centrifugal.dev У 2025-му я багато працював із реальним…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →