Javascript.RU

Объект Deferred.

Каждый, кто когда-либо использовал AJAX, знаком с асинхронным программированием. Это когда мы запускаем некий процесс (скажем, XMLHTTPRequest) и задаем функцию callback обработки результата.

На первый взгляд, все очень просто, но лишь до тех пор, пока мы не захотим добавить вызов новой функции после callback, сделать удобную обработку ошибок и исключений, а также - предусмотреть добавление новых функций в конец цепочки асинхронных вызовов.

Один способ - добавлять каллбэки в параметры всех функций. Другой - использовать для управления асинхронностью отдельный объект. Назовем его Deferred.

Такой объект есть, например, в библиотеке Mochikit и во фреймворке dojo.

Начнем - издалека, с простого примера, который прояснит суть происходящего. Если кому-то простые примеры не нужны - следующий раздел: Асинхронное программирование не для чайников. <code>Deferred</code>..

Нужно отправить результат голосования на сервер и показать ответное сообщение.

Посылкой данных на сервер занимается функция sendData. Эта функция - общего вида, вызывается в куче мест.

В зависимости от результата вызывается callback, если все ок, либо errback - в случае ошибки при запросе.

function sendData(url, data, callback, errback) {
	var xhr = new XmlHttpRequest()
	xhr.onreadystatechange = function() {
		if (xhr.readyState==4) {
			if (xhr.status==200) {
				callback(xhr.responseText)  
			} else {
				errback(xhr.statusText)
			}
		}			
	}
	xhr.open("POST", url, true); 
	xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
	xhr.send("data="+encodeURIComponent(data))
}

Функция processVoteResult обрабатывает JSON-результат ответа сервера.

function processResult(data) {
	var data = eval( '('+data+')' )
	showMessage(data.text)  
}

Обработку ошибок пусть делает функция handleError, для простоты:

function handleError(error) {  alert(error)  }

Используя функцию отправки sendData, обработки результата processResult, теперь можно записать, наконец, метод голосования:

function vote(id) {
	sendData("http://site.ru/vote.php", id, processResult, handleError)
}

В простейшем случае, все - работа закончена. Но полученная реализация обладает рядом недостатков.

  1. Не учитывается возможность ошибки в processResult, например, при вызове eval.
  2. При использовании этого кода нельзя добавить в цепочку вызовов новую функцию updateVoteInfo(), чтобы, она, скажем, сработала после showMessage.

Один способ решения проблемы 2 - это добавить к processResult аргумент callback и вставить вызов updateVoteInfo через промежуточный обработчик результата в функции vote:

function sendData(url, data, callback) {
	var xhr = new XmlHttpRequest()
	xhr.onreadystatechange = function() {
	    if (xhr.readyState==4) { callback(xhr.responseText)  }
	}
	xhr.open("POST", url, true); 
	xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
	xhr.send("data="+encodeURIComponent(data))
}


function processResult(data, callback) {
	var data = eval( '('+data+')' )
       	showMessage(data.text)         
	callback(data)
}


function vote(id) {	
	var process = function(result) {
		processResult(result, updateVoteInfo)
	}
		
	sendData("http://site.ru/vote.php", id, process, handleError)
}

Надеюсь, в коде все понятно, т.к пока что он довольно простой... Но как сделать так, чтобы исключение внутри любого асинхронного обработчика (например, processResult) не приводило к ошибке javascript и падению всей цепочки?

Чтобы обработка ошибок и исключения была схожей - добавим к обработчику аргумент errback и будем вызывать его при исключении. А заодно сделаем то же самое и с функцией vote.

function sendData(url, data, callback, errback) {
	var xhr = new XmlHttpRequest()
	xhr.onreadystatechange = function() {
		if (xhr.readyState==4) {
			if (xhr.status==200) {
				callback(xhr.responseText)  
			} else {
				errback(xhr.statusText)
			}
		}			
	}
	xhr.open("POST", url, true); 
	xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
	xhr.send("data="+encodeURIComponent(data))
}


function processResult(data, callback, errback) {
	try {
		var data = eval( '('+data+')' )
		showMessage(data.text)         
		callback(data)
	} catch(e) {
		errback(e.message)
	}                             
}


function vote(id, callback, errback) {
	var process = function(result) {
		processResult(result, callback, errback)
		updateVoteInfo(result)
	}
		
	sendData("http://site.ru/vote.php", id, process, errback)
}

Код получился чуть переусложненный. Сравним с тем же, но синхронным кодом:

function vote(id) {
	try {
		var result = sendData("http://site.ru/vote.php", id)
		processResult(result)
		updateVoteInfo(result)
	} catch(e) {
		handleError(e)
	}
}


function processResult(data) {
	var data = eval( '('+data+')' )
	showMessage(data.text)
}


function sendData(url, data, callback) {
	var xhr = new XmlHttpRequest()
	xhr.open("POST", url, false); 
	xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
	xhr.send("data="+encodeURIComponent(data))
	if (xhr.status==200) {
		return xhr.responseText	
	} else {
		throw xhr.statusText
	}
}
  • В асинхронном коде аргументы callback/errback
    • их нет при обычном, последовательном программировании
  • В асинхронном коде обратная последовательность действий
    • сначала делается обработчик результата, а потом - вызывается метод
  • Асинхронный код длиннее

Аналогичный пример с объектом Deferred выглядел бы так

function vote(id) {
	var deferred = sendData("http://site.ru/vote.php", id)
	deferred.addCallback(processResult)
	deferred.addCallback(updateVoteInfo)

	deferred.addErrback(handleError)
}



function sendData(url, data) {	
	var xhr = new XmlHttpRequest()
	xhr.open("POST", url, true); 
	xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')

	var deferred = new Deferred()

	xhr.onreadystatechange = function() {
		if (xhr.readyState==4) {
			if (xhr.status==200) {
				deferred.callback(xhr.responseText)  
			} else {
				deferred.errback(xhr.statusText)
			}
		}			
	}

	xhr.send("data="+encodeURIComponent(data))

	return deferred
}


function processResult(data) {
	var data = eval( '('+data+')' )
	showMessage(data.text)         
	return data
}

Смысл объекта Deferred - состоит в исключении всей асинхронности из кода. Асинхронностью занимается объект Deferred.
А сам код становится проще, понятнее и позволяет легко организовывать цепочки асинхронных вызовов.

Следующая статья описывает сам объект Deferred в деталях.


Автор: Гость (не зарегистрирован), дата: 24 ноября, 2008 - 18:21
#permalink

Имеет смысл написать, что в реализации JavaScript нет встроенного конструктора Deferred, и для использования этого стека обработчиков нужно подключить фреймворк. Иначе это с ходу вводит в заблуждение.

А можно увидеть внутреннюю реализацию Deferred? Уверен, что она не такая сложная, чтобы создавать отдельный класс для решения такой задачи.


Автор: slogic (не зарегистрирован), дата: 4 сентября, 2009 - 17:10
#permalink

Вы сами себе противоречите: навешиваете обработчик на onreadystatechange ПОСЛЕ действия (open, send).


Автор: Michael83, дата: 22 марта, 2010 - 01:12
#permalink

интересный подход, но я немного не понял следующее:

var deferred = sendData("http://site.ru/vote.php", id)
deferred.addCallback(processResult)
deferred.addCallback(updateVoteInfo)

deferred.addErrback(handleError)

сперва делается sendData, а только потом addCallback/addErrback, понятно дело что при честном http-запросе, код выполнится раньше чем придет результат, но если говорить вообще об асинхронном программировании, результат может прийти раньше чем добавятся обработчики. Или может я что-то не так понял?


Автор: Ярик (не зарегистрирован), дата: 31 июля, 2012 - 15:56
#permalink

Ну, теоретически результат может прилететь раньше, но на практике вряд-ли. К тому же, идеологически, в навешивании callback-а не должно быть никакой сложной логики, и тот код должен выполнятся сравнительно моментально.


Автор: Ярик (не зарегистрирован), дата: 31 июля, 2012 - 16:04
#permalink

Дополнение - в самом Deffered должно быть предусмотрено, что если методом addCallback(callback) обработчик добавляется после того, как событие произошло, то callback вызывается сразу-же.


Автор: R.S. (не зарегистрирован), дата: 25 октября, 2015 - 21:44
#permalink

Не просто "должно быть предусмотрено" -- оно там в самом деле предусмотрено.
если ответ придёт раньше, чем будет навешен обработчик - то обработчик запустится немедленно.
Таким образом deferred избавляет нас от кошмарной вложенности callback'ов, код выглядит "последовательным" и более читабельным


Автор: MiF, дата: 19 октября, 2012 - 11:04
#permalink

Такие допущения приводят к "плавающим" ошибкам, которые отловить практически нельзя.
Что касается "в теории": если файл закеширован, а при навешивании все-таки происходят некоторые действия, ответ можно получить раньше чем ожидается.
Что касается "на практике": при отладке поставь точку останова на

deferred.addCallback(processResult)

и все обработчики пойдут лесом. По моему весьма жизненно.
Но подход интересный. В больших проектах асинхронные баги добавляют немало головной боли.


Автор: cyber, дата: 27 июля, 2013 - 10:38
#permalink

нет не должен, вы не учитивает работу событийного цикла.


Автор: Гость (не зарегистрирован), дата: 29 ноября, 2012 - 17:08
#permalink

Почему бы не написать проще, без всяких deferred:

var xhr = new XmlHttpRequest()

function sendData(url, data) {
    xhr.onreadystatechange = send_Handler;
    xhr.open("POST", url, true);
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
    xhr.send("data="+encodeURIComponent(data))
}

function send_Handler() {
	if (xhr.readyState==4) {
        if (xhr.status==200) processResult(xhr.responseText);
        else handleError(xhr.statusText);
    } 
}

function processResult(data) {
    var data = eval( '('+data+')' )
    showMessage(data.text) 
}

function handleError(error) {  alert(error)  }

Автор: Kathy Perez (не зарегистрирован), дата: 19 апреля, 2019 - 10:11
#permalink

Если у Deferred вызвать errback с "не ошибкой", например .errback(10) - по описанию получается что Deferred будет в состоянии "success" и вызовы начнутся с callback- в не errback-функций. run 3 free online


Автор: daisyanna (не зарегистрирован), дата: 23 мая, 2019 - 05:58
#permalink

Thank you very much for giving this awesome post, it is a great way to fully enjoy it.
cool math run 3


Автор: atari breakout (не зарегистрирован), дата: 16 октября, 2019 - 10:49
#permalink

Your article makes me more experienced and impressed, I hope you will have more good posts in the near future to share with readers. atari breakout


Автор: Amelia4 (не зарегистрирован), дата: 6 ноября, 2019 - 06:32
#permalink

We are the children
We are the ones who make a brighter day, so let's start giving
There's a choice we're making
We're saving our own lives
It's true we'll make a better day, just you and me
emoji


Автор: obc net banking (не зарегистрирован), дата: 20 января, 2020 - 09:25
#permalink

This article became properly written! It's first-rate to recognize How to Read Tarot Cards.


Автор: dredty (не зарегистрирован), дата: 20 января, 2020 - 09:26
#permalink

It is a good and amazing article. Your facts could be very useful for me and for others. obc net banking


Автор: kailo (не зарегистрирован), дата: 21 января, 2020 - 05:51
#permalink

Your article is very useful, the content is great, I have read a lot of articles, but for your article, it left me a deep impression, thank you for sharing. candy crush soda


Автор: wergt (не зарегистрирован), дата: 10 февраля, 2020 - 09:32
#permalink

I love watching comedy video if you also like then click here comedy whatsapp status video download free this the best website for download free short video


Автор: Гостьrv (не зарегистрирован), дата: 17 февраля, 2020 - 19:39
#permalink

Very nice article check out my new website article


Автор: Гостьbb (не зарегистрирован), дата: 17 февраля, 2020 - 19:40
#permalink

Very nice article check out my new website article mahashivrratri status


Автор: Sophie Miller (не зарегистрирован), дата: 12 марта, 2020 - 21:38
#permalink


Thanks for the useful information! You helped me with advice!


Автор: Steven Jolly (не зарегистрирован), дата: 15 марта, 2020 - 10:23
#permalink

This information you provide is really great, I want to thank you very much, for sharing this information with us. basketballlegends


Автор: Phoen Nix (не зарегистрирован), дата: 21 мая, 2020 - 07:09
#permalink

Do not say but do. Don't chatter but act. Don't promise but prove it. Let's share the good things krunker


Автор: Isak Hansen (не зарегистрирован), дата: 9 сентября, 2020 - 18:16
#permalink

Wow the blog you give us is amazing, no wonder many people want to read this. https://celebrityinsider.org/


Автор: Kristian Kristensen (не зарегистрирован), дата: 9 сентября, 2020 - 18:18
#permalink

I will recomend this blog to all of my friends. Great article.
https://happygamer.com/


Автор: Aputsiaq Larsen (не зарегистрирован), дата: 9 сентября, 2020 - 18:24
#permalink

Thank you for this inspiring blog. I wait for more
https://ballstepded.com/


Автор: Mathias Filemonsen (не зарегистрирован), дата: 9 сентября, 2020 - 18:26
#permalink

I learned so much from this blog. Good inforamtion. https://fixoserror.com/


Автор: Jonas Isaksen (не зарегистрирован), дата: 9 сентября, 2020 - 18:28
#permalink

I wait for more.Great article.
https://premiereretail.com


Автор: Otto Josefsen (не зарегистрирован), дата: 9 сентября, 2020 - 18:31
#permalink

I stumbled across this blog.Great article. https://tecsprint.com


Автор: Arne Christensen (не зарегистрирован), дата: 9 сентября, 2020 - 18:32
#permalink

Thank you for this amazing blog. Congratulations.
https://howtolose10poundsinaweek.comArne Christensen


Автор: Гость (не зарегистрирован), дата: 9 сентября, 2020 - 18:33
#permalink

The things i see here are very informative. Keep going. https://bargainistafashionista.com


Автор: Гость (не зарегистрирован), дата: 9 сентября, 2020 - 18:35
#permalink

I can say that is one of the best articles out on the internet. https://bankncard.com


Автор: Гость (не зарегистрирован), дата: 9 сентября, 2020 - 18:37
#permalink

I readed all the article. So informative https://vhan.net


Автор: Гость (не зарегистрирован), дата: 10 сентября, 2020 - 16:21
#permalink

This is one of the best sites i have found on the internet until now. Nice article keep going.
https://millikenconstructioninc.com/


Автор: Гость (не зарегистрирован), дата: 11 сентября, 2020 - 16:15
#permalink

Thanks for the information, very clear and simple. I will try to use it.Love the way you write. Working my way through your article links
https://vvhen.to/


Автор: Гость (не зарегистрирован), дата: 15 сентября, 2020 - 12:09
#permalink

This is one of the best articles i found on the blogs around the internet. I am really interested in seeing more of this. Keep going with the great work!
https://gzgjskpzz1m.ga


Автор: Гость (не зарегистрирован), дата: 19 сентября, 2020 - 10:56
#permalink

First of all ,you have picked a very unique theme . I think i might design something similar for a future project that i want to build .
On top of that ,i in truth enjoy most of your content pieces and your different point of view.
Thank you https://seoconsultants24.blogspot.com/


Автор: Гость (не зарегистрирован), дата: 19 сентября, 2020 - 11:34
#permalink

Nice information, many thanks to the author. It is incomprehensible to me now, but in general, the usefulness and significance is overwhelming.https://seokarma24.blogspot.com/


Автор: Гость (не зарегистрирован), дата: 19 сентября, 2020 - 15:20
#permalink

I have reviewed the article many times and I find it very impressive. The information is extremely useful especially the last part I care about that information very much. I have been looking for this certain information for a long time.
https://packseo.blogspot.com/


Автор: Гость (не зарегистрирован), дата: 23 сентября, 2020 - 16:59
#permalink

I’m gone to tell my little brother, that he should
also pay a quick visit this blog on regular basis to take updated from hottest information.
https://connectorseo.blogspot.com/


Автор: Гость (не зарегистрирован), дата: 23 сентября, 2020 - 17:07
#permalink

You have made some really good points there. I looked on the web to find out
more about the issue and found most individuals will go along with your views on this website
https://digitalseo24h.blogspot.com/


Автор: Гость (не зарегистрирован), дата: 23 сентября, 2020 - 17:13
#permalink

Fantastic blog! Do you have any helpful hints for aspiring writers?
I’m hoping to start my own site soon but I’m a little lost on everything.
https://sweetseo24h.blogspot.com/


Автор: Гость (не зарегистрирован), дата: 23 сентября, 2020 - 18:16
#permalink

I am hoping the same best effort from you in the future as well. In fact your creative writing skills has inspired me.
https://fancyseo24h.blogspot.com/


Автор: Гость (не зарегистрирован), дата: 29 сентября, 2020 - 16:26
#permalink

You have made some really good points there. I looked on the web to find out
more about the issue and found most individuals will go along with your views on this website
https://phoenixseogeek.com/


Автор: Гость (не зарегистрирован), дата: 1 октября, 2020 - 21:56
#permalink

Nice information, many thanks to the author. It is incomprehensible to me now, but in general, the usefulness and significance is overwhelming.
https://zgjskpzz1m.ga/


Автор: Гость Emily9x (не зарегистрирован), дата: 26 октября, 2020 - 10:08
#permalink

I think that thanks for the valuabe information and insights you have so provided here. Check Mapquest Driving directions to finish your trip!


Автор: 먹튀검증 (не зарегистрирован), дата: 14 ноября, 2020 - 17:05
#permalink

Thanks so much for this information.
I have to let you know I concur on several of the points you make here and others may require some further review,
but I can see your viewpoint. 먹튀검증


Автор: 대출 (не зарегистрирован), дата: 14 ноября, 2020 - 17:06
#permalink

This is a great article thanks for sharing this informative information. I will visit your blog regularly for some latest post. 대출


Автор: Pop Marian (не зарегистрирован), дата: 8 декабря, 2020 - 17:11
#permalink

You know your projects stand out of the herd. There is something special about them. It seems to me all of them are really brilliant!
https://larkenequity.com/
https://larkenequity.com/


Автор: Гость (не зарегистрирован), дата: 28 декабря, 2020 - 15:15
#permalink

Now with coronavirus is really interesting to read things liek this on the internet when you stay at home
https://spacnetwork.com/
https://spacnetwork.com/


Автор: Гость (не зарегистрирован), дата: 28 декабря, 2020 - 18:00
#permalink

I have bookmarked your blog, the articles are way better than other similar blogs.. thanks for a great blog!
https://cultivo-protegido.com/
https://cultivo-protegido.com/


Автор: Гость (не зарегистрирован), дата: 28 декабря, 2020 - 18:10
#permalink

this is really nice to read..informative post is very good to read..thanks a lot!
https://entutorar.com/
https://entutorar.com/


Автор: Гость (не зарегистрирован), дата: 28 декабря, 2020 - 18:31
#permalink

I do not know what to say really what you share very well and useful to the community, I feel that it makes our community much more developed
https://malla-pepinera.com/
https://malla-pepinera.com/


Автор: Misiani (не зарегистрирован), дата: 28 декабря, 2020 - 23:18
#permalink

This is very educational content and written well for a change. It's nice to see that some people still understand how to write a quality post.!
https://entutorar-tomates.com/
https://entutorar-tomates.com/


Автор: Гость (не зарегистрирован), дата: 28 декабря, 2020 - 23:20
#permalink

Excellent article. Very interesting to read. I really love to read such a nice article. Thanks! keep rocking.
https://manta-termica.com/
https://manta-termica.com/


Автор: Гость (не зарегистрирован), дата: 28 декабря, 2020 - 23:24
#permalink

The post is written in very a good manner and it contains many useful information for me.
https://rafia-agricola.com/
https://rafia-agricola.com/


Автор: Revestiuc (не зарегистрирован), дата: 28 декабря, 2020 - 23:28
#permalink

this is really nice to read..informative post is very good to read..thanks a lot!
https://malla-tutora.com/
https://malla-tutora.com/


Автор: Гость (не зарегистрирован), дата: 28 декабря, 2020 - 23:34
#permalink

Автор: Гость (не зарегистрирован), дата: 28 декабря, 2020 - 23:37
#permalink

I do not know what to say really what you share very well and useful to the community, I feel that it makes our community much more developed
https://malla-sombra.com/ https://malla-sombra.com/


Автор: Гость (не зарегистрирован), дата: 28 декабря, 2020 - 23:39
#permalink

You are a very persuasive writer. I can see this in your article. You have a way of writing compelling information that sparks much interest.
https://malla-sombra.mx/
https://malla-sombra.mx/


Автор: Гость (не зарегистрирован), дата: 29 декабря, 2020 - 17:03
#permalink

Oh, great, your article provided me with useful information and a fresh perspective on the subject.
https://malla-espaldera.com/
https://malla-espaldera.com/


Автор: Гость (не зарегистрирован), дата: 29 декабря, 2020 - 17:09
#permalink

Awesome and interesting article. Great things you've always shared with us. Thanks. Just continue composing this kind of post.
https://malla-espaldera.mx/
https://malla-espaldera.mx/


Автор: Гость (не зарегистрирован), дата: 29 декабря, 2020 - 17:33
#permalink

Awesome and interesting article. Great things you've always shared with us. Thanks. Just continue composing this kind of post.
https://gallinero.mx/
https://gallinero.mx/


Автор: Гость (не зарегистрирован), дата: 29 декабря, 2020 - 17:39
#permalink

Thank you for such a well written article. It’s full of insightful information and entertaining descriptions. Your point of view is the best among many.https://control-de-palomas.mx/
https://control-de-palomas.mx/


Автор: Гость (не зарегистрирован), дата: 29 декабря, 2020 - 17:48
#permalink

I do not know what to say really what you share very well and useful to the community, I feel that it makes our community much more developed
https://casa-sombra.com/
https://casa-sombra.com/


Автор: Гость (не зарегистрирован), дата: 29 декабря, 2020 - 17:49
#permalink

This solved the problem I was having for my personal project ! Thank you !
https://casa-sombra.mx/
https://casa-sombra.mx/


Автор: Гость (не зарегистрирован), дата: 29 декабря, 2020 - 17:50
#permalink

I wish more authors of this type of content would take the time you did to research and write so well. I am very impressed with your vision and insight.
https://chickenmalla.com/
https://chickenmalla.com/


Автор: Гость (не зарегистрирован), дата: 29 декабря, 2020 - 17:51
#permalink

You completed a few fine points there. I did a search on the subject and found nearly all persons will go along with with your blog.
https://ground-cover.mx/
https://ground-cover.mx/


Автор: Гость (не зарегистрирован), дата: 29 декабря, 2020 - 17:52
#permalink

Awesome article! I want people to know just how good this information is in your article. It’s interesting, compelling content. Your views are much like my own concerning this subject.
https://chickenmalla.net/
https://chickenmalla.net/


Автор: Гость (не зарегистрирован), дата: 30 декабря, 2020 - 19:10
#permalink

You have made some really good points there. I looked on the web to find out
more about the issue and found most individuals will go along with your views on this website
https://chickenmallas.com/
https://chickenmallas.com/


Автор: Гость (не зарегистрирован), дата: 30 декабря, 2020 - 19:16
#permalink

You are a very persuasive writer. I can see this in your article. You have a way of writing compelling information that sparks much interest.
https://chickenmallas.net/
https://chickenmallas.net/


Автор: Gicu (не зарегистрирован), дата: 30 декабря, 2020 - 21:16
#permalink

Your information was very useful to me. That's exactly what I've been looking for
https://guacamalla.com/
https://guacamalla.com/


Автор: Гость (не зарегистрирован), дата: 30 декабря, 2020 - 21:21
#permalink

Now with coronavirus is really interesting to read things liek this on the internet when you stay at home
https://guacamalla.net/
https://guacamalla.net/


Автор: Гость (не зарегистрирован), дата: 30 декабря, 2020 - 21:37
#permalink

It is wonderful to be here with everyone, I have a lot of knowledge from what you share, to say thank you, the information and knowledge here helps me a lot
https://guacamallas.com/
https://guacamallas.com/


Автор: Bisiam (не зарегистрирован), дата: 30 декабря, 2020 - 21:45
#permalink

Wow very good post, please dont stop posting things like this because ie really enjoy this
https://guacamallas.net/
https://guacamallas.net/


Автор: Гость (не зарегистрирован), дата: 30 декабря, 2020 - 21:50
#permalink

I high appreciate this post.
https://hortoclips.com/
https://hortoclips.com/


Автор: Гость (не зарегистрирован), дата: 30 декабря, 2020 - 21:55
#permalink

It’s hard to find the good from the bad sometimes, but I think you’ve nailed it!
https://hortoclips.net/
https://hortoclips.net/


Автор: Гость (не зарегистрирован), дата: 1 января, 2021 - 18:21
#permalink

You are a very persuasive writer. I can see this in your article. You have a way of writing compelling information that sparks much interest.
https://hortocost.com/
https://hortocost.com/


Автор: Гость (не зарегистрирован), дата: 1 января, 2021 - 18:40
#permalink

Seriously interesting points produced here. I are going to be again quickly to view what else there’s to read up on.
https://hortocost.info/
https://hortocost.info/


Автор: Гость (не зарегистрирован), дата: 1 января, 2021 - 18:51
#permalink

You have made some really good points there. I looked on the web to find out
more about the issue and found most individuals will go along with your views on this website
https://hortocost.net/
https://hortocost.net/


Автор: Гость (не зарегистрирован), дата: 1 января, 2021 - 18:52
#permalink

I found that site very usefull and this survey is very cirious, I ' ve never seen a blog that demand a survey for this actions, very curious...
https://hortomalha.com/
https://hortomalha.com/


Автор: Гость (не зарегистрирован), дата: 1 января, 2021 - 19:20
#permalink

I high appreciate this post. It’s hard to find the good from the bad sometimes, but I think you’ve nailed it! would you mind updating your blog with more information?
https://hortomalla.com/
https://hortomalla.com/


Автор: Гость (не зарегистрирован), дата: 1 января, 2021 - 19:22
#permalink

This is a great inspiring article.I am pretty much pleased with your good work.
https://hortomallas.cn/
https://hortomallas.cn/


Автор: Гость (не зарегистрирован), дата: 1 января, 2021 - 19:25
#permalink

You put really very helpful information. Keep it up. Keep blogging. Looking to reading your next post.
https://hortomallas.es/
https://hortomallas.es/


Автор: Гость (не зарегистрирован), дата: 1 января, 2021 - 19:26
#permalink

I have a hard time describing my thoughts on content, but I really felt I should here.
https://hortomallas.hk/
hhttps://hortomallas.hk/


Автор: Гость (не зарегистрирован), дата: 2 января, 2021 - 18:34
#permalink

Wow very good post, please dont stop posting things like this because ie really enjoy this
https://invernavelo.com/
https://invernavelo.com/


Автор: Гость (не зарегистрирован), дата: 2 января, 2021 - 18:41
#permalink

Excellent article. Very interesting to read. I really love to read such a nice article. Thanks! keep rocking.
https://invernavelo.net/
https://invernavelo.net/


Автор: Гость (не зарегистрирован), дата: 2 января, 2021 - 18:57
#permalink

Awesome and interesting article. Great things you've always shared with us. Thanks. Just continue composing this kind of post.
https://mallajuana.net/
https://mallajuana.net/


Автор: Гость (не зарегистрирован), дата: 2 января, 2021 - 19:04
#permalink

Awesome and interesting article. Great things you've always shared with us. Thanks. Just continue composing this kind of post.
https://obamalla.com/
https://obamalla.com/


Автор: Гость (не зарегистрирован), дата: 2 января, 2021 - 19:13
#permalink

this is really nice to read..informative post is very good to read..thanks a lot!
https://obamalla.net/
https://obamalla.net/


Автор: Гость (не зарегистрирован), дата: 2 января, 2021 - 19:20
#permalink

I do not know what to say really what you share very well and useful to the community, I feel that it makes our community much more developed
https://ortomallas.com/
https://ortomallas.com/


Автор: Гость (не зарегистрирован), дата: 2 января, 2021 - 19:28
#permalink

This solved the problem I was having for my personal project ! Thank you !
https://scrog.mx/
https://scrog.mx/


Автор: Гость (не зарегистрирован), дата: 2 января, 2021 - 19:42
#permalink

I wish more authors of this type of content would take the time you did to research and write so well. I am very impressed with your vision and insight.
https://cultivos-hidroponicos.com/
https://cultivos-hidroponicos.com/


Автор: Гость (не зарегистрирован), дата: 2 января, 2021 - 19:46
#permalink

You completed a few fine points there. I did a search on the subject and found nearly all persons will go along with with your blog.
https://bird-control-net.com/
https://bird-control-net.com/


Автор: Гость (не зарегистрирован), дата: 2 января, 2021 - 19:49
#permalink

Awesome article! I want people to know just how good this information is in your article. It’s interesting, compelling content. Your views are much like my own concerning this subject.
https://anti-bird-netting.com/
https://anti-bird-netting.com/


Автор: Гость (не зарегистрирован), дата: 4 января, 2021 - 14:55
#permalink

You are a very persuasive writer. I can see this in your article. You have a way of writing compelling information that sparks much interest.
https://anti-deer-fence.net/
https://anti-deer-fence.net/


Автор: Гость (не зарегистрирован), дата: 4 января, 2021 - 15:05
#permalink

It is wonderful to be here with everyone, I have a lot of knowledge from what you share, to say thank you, the information and https://bird-netting.net/
https://bird-netting.net/


Автор: Гость (не зарегистрирован), дата: 4 января, 2021 - 15:17
#permalink

Oh, great, your article provided me with useful information and a fresh perspective on the subject.
https://cannabis-netting.net/
https://cannabis-netting.net/


Автор: Гость (не зарегистрирован), дата: 4 января, 2021 - 15:24
#permalink

Awesome and interesting article. Great things you've always shared with us. Thanks. Just continue composing this kind of post.
https://chicken-wire.net/
https://chicken-wire.net/


Автор: Гость (не зарегистрирован), дата: 4 января, 2021 - 15:29
#permalink

Thank you for such a well written article. It’s full of insightful information and entertaining descriptions. Your point of view is the best among many.https://crop-netting.net/
https://crop-netting.net/


Автор: Гость (не зарегистрирован), дата: 4 января, 2021 - 15:35
#permalink

Thank you so much for sharing this great blog.Very inspiring and helpful too.Hope you continue to share more of your ideas.I will definitely love to read.
https://cucumber-net.com/
https://cucumber-net.com/


Автор: Гость (не зарегистрирован), дата: 4 января, 2021 - 15:38
#permalink

Автор: Гость (не зарегистрирован), дата: 5 января, 2021 - 19:07
#permalink

Excellent article. Very interesting to read. I really love to read such a nice article. Thanks! keep rocking.
https://horticulture-netting.com/
https://horticulture-netting.com/


Автор: Гость (не зарегистрирован), дата: 5 января, 2021 - 19:12
#permalink

The post is written in very a good manner and it contains many useful information for me.
https://marijuana-netting.net/
https://marijuana-netting.net/


Автор: Гость (не зарегистрирован), дата: 5 января, 2021 - 19:19
#permalink

I have bookmarked your blog, the articles are way better than other similar blogs.. thanks for a great blog!
https://plastic-netting.net/
https://plastic-netting.net/


Автор: Гость (не зарегистрирован), дата: 5 января, 2021 - 19:30
#permalink

Thank you so much for sharing this great blog.Very inspiring and helpful too.Hope you continue to share more of your ideas.I will definitely love to read.
https://poultry-netting.net/
https://poultry-netting.net/


Автор: Гость (не зарегистрирован), дата: 5 января, 2021 - 19:43
#permalink

Awesome and interesting article. Great things you've always shared with us. Thanks. Just continue composing this kind of post.
https://shade-cloth.net/
https://shade-cloth.net/


Автор: Гость (не зарегистрирован), дата: 5 января, 2021 - 19:48
#permalink

Awesome and interesting article. Great things you've always shared with us. Thanks. Just continue composing this kind of post.
https://shade-net.net/
https://shade-net.net/


Автор: Гость (не зарегистрирован), дата: 5 января, 2021 - 19:55
#permalink

Your information was very useful to me. That's exactly what I've been looking for
https://tomato-clips.com/
https://tomato-clips.com/


Автор: Гость (не зарегистрирован), дата: 5 января, 2021 - 20:00
#permalink

Thanks For sharing this Superb article.I use this Article to show my assignment in college.it is useful For me Great Work.
https://trellising-net.com/
https://trellising-net.com/


Автор: Гость (не зарегистрирован), дата: 5 января, 2021 - 20:05
#permalink

I found that site very usefull and this survey is very cirious, I ' ve never seen a blog that demand a survey for this actions, very curious...
https://trellis-netting.net/
https://trellis-netting.net/


Автор: Гость (не зарегистрирован), дата: 7 января, 2021 - 14:27
#permalink

Very interesting discussion glad that I came across such informative post. Keep up the good work friend
https://pestcontrolcanberraarea.com.au
https://pestcontrolcanberraarea.com.au


Автор: Гость (не зарегистрирован), дата: 7 января, 2021 - 18:19
#permalink

Your article is really great. I like the way you wrote this information.
https://emergencylocksmithperth.com.au/
https://emergencylocksmithperth.com.au/


Автор: Гость (не зарегистрирован), дата: 7 января, 2021 - 18:27
#permalink

I found that site very usefull and this survey is very cirious, I ' ve never seen a blog that demand a survey for this actions, very curious...
https://bestpestcontrolperth.com.au/
https://bestpestcontrolperth.com.au/


Автор: Гость (не зарегистрирован), дата: 7 января, 2021 - 18:36
#permalink

This solved the problem I was having for my personal project ! Thank you !
https://onlinecrowd.com.au
https://onlinecrowd.com.au


Автор: Гость (не зарегистрирован), дата: 12 января, 2021 - 22:10
#permalink

I do not know what to say really what you share very well and useful to the community, I feel that it makes our community much more developed
https:https://emergencydental247.com/ https://emergencydental247.com/o/


Автор: Гость (не зарегистрирован), дата: 12 января, 2021 - 22:15
#permalink

You are a very persuasive writer. You have a way of writing compelling information that sparks much interest.
audigitalsolutions.com
audigitalsolutions.com">audigitalsolutions.com


Автор: Гость (не зарегистрирован), дата: 18 января, 2021 - 23:10
#permalink

This is very educational content and written well for a change. It's nice to see that some people still understand how to write a quality post.!
https://woontuinmagazine.nl/
https://woontuinmagazine.nl/


Автор: Гость (не зарегистрирован), дата: 22 января, 2021 - 19:39
#permalink

It is wonderful to be here with everyone, I have a lot of knowledge from what you share, to say thank you, the information and https://audigitalsolutions.com/
https://audigitalsolutions.com/


Автор: Гость (не зарегистрирован), дата: 27 января, 2021 - 12:29
#permalink

Now with coronavirus is really interesting to read things liek this on the internet when you stay at home
https://plasticpalletsales.com
https://plasticpalletsales.com


Автор: Гость (не зарегистрирован), дата: 27 января, 2021 - 17:23
#permalink

I have bookmarked your blog, the articles are way better than other similar blogs.. thanks for a great blog!
https://megabonuscasino.nl/
https://megabonuscasino.nl/


Автор: Гость (не зарегистрирован), дата: 27 января, 2021 - 17:51
#permalink

I do not know what to say really what you share very well and useful to the community, I feel that it makes our community much more developed
https://vosairservices.com/
https://vosairservices.com/


Автор: Гость (не зарегистрирован), дата: 28 января, 2021 - 15:27
#permalink

Excellent article. Very interesting to read. I really love to read such a nice article. Thanks! keep rocking.
https://entutorado.com/
https://entutorado.com/


Автор: Гость (не зарегистрирован), дата: 10 февраля, 2021 - 14:24
#permalink

Do you have a spam issue on this site; I also am a blogger, and I was curious about your situation; many of us have developed some nice practices and we are looking to trade techniques with other folks, be sure to shoot me an email if interested.
https://atlanticflagpole.com
https://atlanticflagpole.com


Автор: Rvh (не зарегистрирован), дата: 13 февраля, 2021 - 15:18
#permalink

Автор: Гость (не зарегистрирован), дата: 18 февраля, 2021 - 12:55
#permalink

No matter if some one searches for his necessary thing, thus he/she wishes to be available that in detail, thus that thing is maintained over here.
https://schmidtchristmasmarket.com/
https://schmidtchristmasmarket.com/


Автор: Alexia, дата: 20 февраля, 2021 - 17:57
#permalink

It's wonderful to be here with everyone, Nice post. Thanks for sharing! I have a lot of knowledge from what you are sharing, to say thank you, the information and knowledge here helps me a lot. Quel robot patissier choisir


Автор: Ydbju (не зарегистрирован), дата: 22 февраля, 2021 - 20:57
#permalink

Great content on this royal attitude status


Автор: Гость (не зарегистрирован), дата: 23 февраля, 2021 - 13:38
#permalink

Attractive component of content. I just stumbled upon your weblog and in accession capital to say that I acquire actually enjoyed account your weblog posts. Any way I will be subscribing in your feeds or even I achievement you get admission to consistently fast.
https://whispersandhoney.com/
https://whispersandhoney.com/


Автор: Craig Sanders (не зарегистрирован), дата: 27 июля, 2021 - 05:02
#permalink

скачать yowhatsapp для бесплатных текстовых сообщений, звонков


Автор: the impossible game (не зарегистрирован), дата: 16 ноября, 2021 - 05:09
#permalink

There are many options available to you in your spare time, but will you choose pure entertainment or both entertaining and training yourself? Fun, comfortable, free, and ich are what Sudoku 247 gives you.


Автор: Гость (не зарегистрирован), дата: 29 ноября, 2021 - 10:57
#permalink

Это когда мы запускаем некий процесс (скажем, XMLHTTPRequest) и задаем функцию callback обработки результата. 188bet


Автор: 토토사이트추천 (не зарегистрирован), дата: 11 марта, 2022 - 07:43
#permalink

Yes i am completely concurred with this article and i simply need say this article is extremely decent and exceptionally useful article.I will make a point to be perusing your blog more. You made a decent point yet I can"t resist the urge to ponder, shouldn"t something be said about the other side? 토토사이트추천


Автор: Гость (не зарегистрирован), дата: 15 апреля, 2022 - 23:24
#permalink

Автор: Гость (не зарегистрирован), дата: 13 мая, 2022 - 08:49
#permalink

There are many options available to you in your spare time, but will you choose pure entertainmen and good java info for you 토토사이트


Автор: Гость (не зарегистрирован), дата: 13 мая, 2022 - 08:57
#permalink

Yes i am completely concurred with this article and i simply need say this article is extremely decent and exceptionally good java info me check web 카지노사이트


Автор: Mrbass (не зарегистрирован), дата: 18 августа, 2022 - 15:39
#permalink

it's nice to meet you! I stumbled upon your WhatsApp while browsing for latest version and was wondering if you had any questions about WhatsApp. It's interesting to see that we both have the same passion for WhatsApp and I'm really glad we were able to connect because of it! We should definitely keep in touch and maybe even hang out sometime using latest ! Hey, so I saw your post about WhatsApp mods and noticed that you are in the same boat as me when it comes to WhatsApp . We've been friends on Facebook for ages and it's so cool to see that we like to use the same. WhatsApp has been a part of many lives since its very new in 2023 . Whatsapp has now become one of the most popular messaging apps around the globe and has more than 1 billion monthly users. latest version not only use it to stay connected with their friends and family members but also use it to stay connected with their business contacts. WhatsApp app is an instant messaging app that offers text, voice calls, video calls, and the ability to send APK files in size. Whatsapp mods are the best way to customize your FMWA and make it look like you want it to. Today, there are thousands of GB mods available for Whatsapp account. Each one has a different set of Whatsapp accounts that can help you change the appearance or functionality of your app. For example, there are mods that change the color of your chat bubbles or allow you to send stickers without having to download them first. There are also gb mods that let you record video messages without having to switch apps or use any other third-party software.With growing popularity of WhatsApp , there have been many WhatsApp mods downloaded which can be used on any smartphone running on Android device or iOS operating systems. download YoWhatsApp & FMWhatsApp APK on Mrbass


Автор: Azka Pratama (не зарегистрирован), дата: 27 августа, 2022 - 11:22
#permalink

Clash of Clans adalah game strategi yang dapat dimainkan di ponsel Android maupun Iphone. Game yang satu ini dikembangkan dan diterbitkan oleh pengembang permainan asal Finlandia, yaitu Supercell. Permainan ini dirilis untuk platform iOS pada 2 Agustus 2012, dan di Google Play untuk Android pada 7 Oktober 2013. temukan base th 14, base th 13 dan base th 12 dan copy base melakui link agar dapat kamu gunakan secara gratis.


Автор: 먹튀검증 (не зарегистрирован), дата: 21 ноября, 2022 - 15:46
#permalink

Thanks for the good article. I hope to see you with a better article than the one I am writing now. Thank you again 먹튀검증


Автор: 메이저사이트 (не зарегистрирован), дата: 21 ноября, 2022 - 15:46
#permalink

Now your article is a very impressive article for me. I look forward to seeing your majestic writings in the future. Take good care of me 메이저사이트


Автор: dayeyo (не зарегистрирован), дата: 30 ноября, 2022 - 06:08
#permalink

Hello! I love your post!
black screen helps your eyes less strain and white screen tool


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
1 + 1 =
Введите результат. Например, для 1+3, введите 4.
 
Текущий раздел
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние комментарии
Последние темы на форуме
Forum