Comments 16
Отличная статья, теперь понятно где применить.
+2
в конце $.wen() — кажется ошибочка закралась
+1
Наконец-то они это сделали и, за счёт популярности, унифицировали-стандартизировали.
Больше не придётся изобретать велосипеды :)
Больше не придётся изобретать велосипеды :)
0
смахивает на питонячий Twisted. Не просто смахивает, а один к одному относится. Насколько понимаю, концепцию оттуда и позаимствовали?
0
jQuery Deferred is based on the CommonJS Promises/A design. источник
0
кто не положил в закладки — тот нуб
-7
Хм, не могу найти цепочек вызовов
0
Цепочки вызова выглядят, примерно, так: $.ajax(options).done(function() { }).done(function() { }).fail(function() { });
Это как при работе с DOM элементами: $('div').attr('title', 'test').css('color', 'red').text('123');
Это как при работе с DOM элементами: $('div').attr('title', 'test').css('color', 'red').text('123');
0
Это да, но я про другие цепочки. Хотелось бы вдобавок видеть что-то вида:
ajax1 -> (ajax2, fadeOut, static1) -> ajax3 -> (static2, ajax4) ->…
Т.е. выстраивать такие вот очереди (тем же .then, без помощи $.when). По-идее это должно входить в Deferred. А сейчас оно получается так же неудобно, как и раньше.
ajax1 -> (ajax2, fadeOut, static1) -> ajax3 -> (static2, ajax4) ->…
Т.е. выстраивать такие вот очереди (тем же .then, без помощи $.when). По-идее это должно входить в Deferred. А сейчас оно получается так же неудобно, как и раньше.
0
А синтаксически корректный пример, как с then это может быть удобнее, можно привести?
0
Что-то вроде:
Как-то так. О чем-то таком уже писали на Хабре и вроде как оно реализовано в dojo.Deferred объекте. Вот мне и интересно, есть ли такое в jQuery?
Возможно, разработчики jQuery просто не успели это сделать к выходу. Или же просто я этого не нашёл
$.get('/ajax/1/')
.done(function(){
console.log('ajax 1 success'); // пока мы в контексте первого ajax-вызова
})
.then(function(){
return $.get('/ajax/2/'); // но как только один из слушателей возвращает promise ...
})
.done(function(){
console.log('ajax 2 success'); // ... контекст меняется
})
Как-то так. О чем-то таком уже писали на Хабре и вроде как оно реализовано в dojo.Deferred объекте. Вот мне и интересно, есть ли такое в jQuery?
Возможно, разработчики jQuery просто не успели это сделать к выходу. Или же просто я этого не нашёл
0
… или ввести бы для $.Deferred свой метод .when:
$.get('/ajax/1/')
.done(...)
.fail(...)
.when(
function(){
return $.get('/ajax/2/');
},
function(){
var d = $.Deferred();
$('#id').fadeOut(d.resolve);
return d.promise();
}
)
.done(...)
.fail(...)
0
Интересное предложение. Да, в jquery.Deferred сейчас возврат из «слушателей» никак не учитывается. Думаю, разработчики сделали выбор в пользу простоты реализации, опустив некоторые фичи.
Надо будет на досуге подумать, что тут можно сделать, кроме вложенных функций.
Надо будет на досуге подумать, что тут можно сделать, кроме вложенных функций.
0
Можно порадоваться, в версии 1.6 сделали почти то, что ты и просил: habrahabr.ru/blogs/jquery/118713/#deferredpipe
0
Only those users with full accounts are able to leave comments. Log in, please.
jQuery Deferred Object (подробное описание)