Асинхронне програмування або Event-driven програмування - загальна назва для стилю програмування, при якому результат роботи функції приходить не відразу після виклику, а коли-небудь потім.
Писати програми, в яких результат виклику функції приходить невідомо коли - куди складніше, ніж звичайні. Вкладені виклики, обробка помилок, контроль за тим, що відбувається - все ускладнюється.
Тому люди винайшли деякі корисні методи, що полегшують асинхронну життя.
Кожен, хто коли-небудь використав AJAX, знайомий з асинхронним програмуванням. Це коли ми запускаємо якийсь процес (скажімо, XMLHTTPRequest) і задаємо функцію callback обробки результату.
На перший погляд, все дуже просто, але лише до тих пір, поки ми не захочемо додати виклик нової функції після callback. зробити зручну обробку помилок і виключень, а також - передбачити додавання нових функцій в кінець ланцюжка асинхронних викликів.
Один спосіб - додавати каллбекі в параметри всіх функцій. Інший - використовувати для управління асинхронність окремий об'єкт. Назвемо його Deferred.
Об'єкт Deferred инкапсулирует послідовність оброблювачів для ще не існуючого результату, ніж сильно спрощує складні AJAX-додатки. Він надається різними фреймворками (Dojo Toolkit, Mochikit) і окремими Бібліотечка (jsDeferred, Promises etc).