Промисы(общения)
setTeimout 0
Не могу понять в чем профит от использования промисов? Какая разница, что я напишу так: setTimeout(function(){ че-то делаю }, 1000); или заюзаю промисы и сделаю тоже самое по сути promise = new Promise(function(resolve, reject){ setTimeout(function(){ че-то делаю resolve(); }); }); Одно и тоже по сути, зачем же тогда появились промисы, в чем профит? |
Это нужно для упрощения восприятия алгоритма.
Например у вас есть метод в котором вы делаете запрос, но не 1, а десяток. И после выполнения всех запросов вам надо что-то сделать. Обещания позволяют не разрывать эту логическую цепочку, раскидывая её по методам объекта. |
промисы особенно мощно рулят, когда надо сделать несколько запросов, причем в каждом использовать результаты предыдущего.
традиционный подход с калбэками "вырастает вправо" myFunc(..., function(data) { ... myFunc2(data, function(data1) { ... myFunc3(data1, function(data2) { ... }); }); }); вариант с промисами остается линейным: myFunc(...) .then(function(data) { ... return myFunc2(data); }) .then(function(data) { ... return myFunc3(data); }) .then(function(data) { ... return myFunc4(data); }); здесь каждая из функций возвращает промис, и в этом случае очередной .then ждет выполнения уже этого нового промиса. ну и есть функция Promise.all - подождать, когда выполнятся все промисы в массиве. плюс есть обработка ошибок и исключений (второй параметр в then или первый - в методе catch). из этих элементов можно комбинировать произвольные конструкции, которые на калбэках смотрелись бы убийственно. |
Цитата:
|
Часовой пояс GMT +3, время: 03:13. |