Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.11.2014, 17:14
Кандидат Javascript-наук
Отправить личное сообщение для FanAizu Посмотреть профиль Найти все сообщения от FanAizu
 
Регистрация: 08.03.2011
Сообщений: 148

Промисы(общения)
setTeimout 0

Не могу понять в чем профит от использования промисов?
Какая разница, что я напишу так:
setTimeout(function(){
че-то делаю
}, 1000);

или заюзаю промисы и сделаю тоже самое по сути
promise = new Promise(function(resolve, reject){
setTimeout(function(){
че-то делаю
resolve();
});
});

Одно и тоже по сути, зачем же тогда появились промисы, в чем профит?
Ответить с цитированием
  #2 (permalink)  
Старый 28.11.2014, 17:26
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Это нужно для упрощения восприятия алгоритма.

Например у вас есть метод в котором вы делаете запрос, но не 1, а десяток. И после выполнения всех запросов вам надо что-то сделать. Обещания позволяют не разрывать эту логическую цепочку, раскидывая её по методам объекта.
Ответить с цитированием
  #3 (permalink)  
Старый 28.11.2014, 17:43
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

промисы особенно мощно рулят, когда надо сделать несколько запросов, причем в каждом использовать результаты предыдущего.

традиционный подход с калбэками "вырастает вправо"
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).

из этих элементов можно комбинировать произвольные конструкции, которые на калбэках смотрелись бы убийственно.
Ответить с цитированием
  #4 (permalink)  
Старый 28.11.2014, 17:52
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от FanAizu
Промисы(общения)
Не общения, а обещания ))
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск