Я вже декілька років займаюся веб-JavaScript (vanilla JS, jQuery, Backbone тощо), і останнім часом я займаюся деякою роботою з Node.js. У мене знадобився певний час, щоб розібратися з "неблокуючим" програмуванням, але зараз я звик використовувати зворотні дзвінки для операцій вводу-виводу і чогось іншого.
Я розумію, що Javascript від природи однопотоковий. Я розумію концепцію Вузла "черга подій". Що я НЕ розумію, це те, що визначає, чи "блокує" окрему операцію javascript, а не "блокує". Як я можу знати, від яких операцій я можу залежати, щоб синхронізувати результат для використання, який я використовуватиму в пізнішому коді, і які мені потрібно буде передавати зворотні дзвінки, щоб я міг обробити вихід після завершення початкової операції? Чи є десь список функцій Javascript, які є асинхронними / не блокуючими, і список тих, які синхронізуються / блокують? Що заважає моєму додатку Javascript бути однією з гігантських умов гонки?
Я знаю, що операції, які займають тривалий час, як операції вводу-виводу в операціях Node та AJAX в Інтернеті, вимагають, щоб вони були асинхронними і тому використовували зворотні виклики - але хто визначає, що кваліфікується як "тривалий час"? Чи є якийсь тригер у цих операціях, який видаляє їх із звичайної "черги подій"? Якщо ні, то чим вони відрізняються від простих операцій, таких як присвоєння значень змінним або циклічного перегляду через масиви, які, здається, ми можемо залежати від завершення синхронно?
Можливо, я навіть не думаю про це правильно - сподіваючись, що хтось зможе мене встановити прямо. Спасибі!