Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.03.2014, 19:16
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Deferred - что внутри него?
Искал долго (может не там искал...), но так и не удалось найти чистый исходный код Deferred. Смотрел в jquery - ниче не понял. На основе прочитанного вот набросал:
function Deferred(){
	var self = this;
	var doneList = [];
	var failList = [];
	var condition = 0;
	
	function add(func, list){
		list.push(func);
		switch(condition){
			case -1:
				run(failList);
				break;
			case 1:
				run(doneList);
		}
	}
	
	function run(list){
		while(list.length > 0){
			list.shift()();
		}
	}
	
	this.done = function(f){
		add(f, doneList);
		return this;
	};
	
	this.fail = function(f){
		add(f, failList);
		return this;
	};
	
	this.resolve = function(){
		condition = 1;
		run(doneList);
		return this;
	};
	
	this.reject = function(){
		condition = -1;
		run(failList);
		return this;
	};
	
	this.state = function(){
		return condition;
	};
	
	/*** TMP ***/
	
	this.getDone = function(){
		return doneList;
	};
}


Примерно оно?
Ответить с цитированием
  #2 (permalink)  
Старый 27.03.2014, 20:20
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Нет, не все так просто, resolver, resolve и reject выполняются асинхронно и ошибки в них не приведут к остановке всего последующего кода.

И лучше сначала разберись с Promise http://www.html5rocks.com/en/tutorials/es6/promises/
Ответить с цитированием
  #3 (permalink)  
Старый 27.03.2014, 20:26
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Octane,
А есть где-нибудь код deferred? Не в составе библиотеки, а чистый, только объект
Ответить с цитированием
  #4 (permalink)  
Старый 27.03.2014, 20:29
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Promise это стандартизированная версия Deferred, просто Deferred раньше появился. Ищи в гугле javascript promises polyfill, это и будет только код для реализации «обещаний», без лишнего кода от библиотек.
Ответить с цитированием
  #5 (permalink)  
Старый 27.03.2014, 20:38
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Octane,
Это promise?
https://www.dropbox.com/s/1mzewt3sfdvvw0f/promise.js

А это что?
https://www.dropbox.com/s/eojlf4r5a3v11yx/deferred.js
Ответить с цитированием
  #6 (permalink)  
Старый 27.03.2014, 21:50
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Hapson
А есть где-нибудь код deferred? Не в составе библиотеки, а чистый, только объект
Постом выше тебе Octane дал ссылку. Ты ее смотрел? Я делаю вывод, что нет. Т.е. ссылки тебе давать бесполезно, ты их не смотришь Тогда я тоже не дам

---

А еще почитай, почему так писать
function Deferred(){
   this.state = function(){
       // ...
   };
}

в большинстве случаев ай-яй-яй

---

и может быть все-таки начнешь с изучения яваскрипта?)
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #7 (permalink)  
Старый 27.03.2014, 22:31
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

Сообщение от nerv_
Постом выше тебе Octane дал ссылку. Ты ее смотрел? Я делаю вывод, что нет. Т.е. ссылки тебе давать бесполезно, ты их не смотришь Тогда я тоже не дам
Английский я не знаю, но перевод этой статьи читал на хабре - ничего не понятно.
Сообщение от nerv_
А еще почитай, почему так писать
1
function Deferred(){
2
   this.state = function(){
3
       // ...
4
   };
5
}

в большинстве случаев ай-яй-яй
Почему?
Сообщение от nerv_
и может быть все-таки начнешь с изучения яваскрипта?)
У меня свои методы обучения. Я учу на практике
Ответить с цитированием
  #8 (permalink)  
Старый 27.03.2014, 22:33
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

nerv_,
Сколько я читал статей по promise и deferred, везде пишут как это клево и примеры использования, но самого КОДА нет нигде.
Ответить с цитированием
  #9 (permalink)  
Старый 27.03.2014, 22:48
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

https://www.dropbox.com/s/1mzewt3sfdvvw0f/promise.js

Это promise?
Ответить с цитированием
  #10 (permalink)  
Старый 27.03.2014, 23:46
Аватар для Hapson
Кандидат Javascript-наук
Отправить личное сообщение для Hapson Посмотреть профиль Найти все сообщения от Hapson
 
Регистрация: 23.07.2013
Сообщений: 122

http://s3.amazonaws.com/es6-promises/promise-0.1.1.js

я так понимаю это promise, а ссылка выше - это более ранняя версия promise?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Смишных картинок тред megaupload Оффтопик 3447 03.07.2023 09:47
http://gigalit.info - Мои контакты Маэстро Ваши сайты и скрипты 70 08.12.2011 03:12
Разбираем AjaxOOP eai Общие вопросы Javascript 41 04.11.2010 23:37
Сторонние библиотеки - быть или не быть? IIIEPJIOK Оффтопик 64 21.03.2009 19:39
Как узнать что внутри тега Destrifer Events/DOM/Window 4 09.02.2009 09:15