Зачем столько асинхронных инструментов в JavaScript?
Для начало, скажу - мне очень нравится писать на JS, нравится его универсальность и синтаксис. Продолжать могу долго, но не об этом.
Чем глубже стараюсь понять язык, тем более странно для меня, что в нем так много инструментов для асинхронности.
Сначала были callback’и, их минусы понятны, затем появились промисы и генераторы, затем добавили async/await. Зачем столько по сути одинаковых инструментов? Последствия эволюции? Или у каждого свои задачи?
промисы и async это одно и тоже.
И все это лишь сахар для коллбэков разной степени удобности. И вы еще евенты не упомянули. А так же цикл событий, таски/микротаски, квази-асинхронность.
В язык входят те вещи, которые tc39 посчитают достойными этого. Промисы позволили писать цепочки более понятно, асинки избавили от обилия скобочек. Генераторы не прижились и редко где используются, хотя иногда я их применяю, по назначению разумеется, а не для асинхронного выполнения.
И этого еще не хватает, неплохо было бы иметь поддержку Observable на уровне языка, многие браузерные api стали бы удобнее.
Я бы еще добавил, что генераторы как таковые никогда для работы с асинхронным кодом не предназначались, просто они позволяли это делать, вот их и использовали до появления нативных async-await