Comments 16
Отличная статья, теперь понятно где применить.
в конце $.wen() — кажется ошибочка закралась
Наконец-то они это сделали и, за счёт популярности, унифицировали-стандартизировали.
Больше не придётся изобретать велосипеды :)
Больше не придётся изобретать велосипеды :)
смахивает на питонячий Twisted. Не просто смахивает, а один к одному относится. Насколько понимаю, концепцию оттуда и позаимствовали?
jQuery Deferred is based on the CommonJS Promises/A design. источник
кто не положил в закладки — тот нуб
Хм, не могу найти цепочек вызовов
Цепочки вызова выглядят, примерно, так: $.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');
Это да, но я про другие цепочки. Хотелось бы вдобавок видеть что-то вида:
ajax1 -> (ajax2, fadeOut, static1) -> ajax3 -> (static2, ajax4) ->…
Т.е. выстраивать такие вот очереди (тем же .then, без помощи $.when). По-идее это должно входить в Deferred. А сейчас оно получается так же неудобно, как и раньше.
ajax1 -> (ajax2, fadeOut, static1) -> ajax3 -> (static2, ajax4) ->…
Т.е. выстраивать такие вот очереди (тем же .then, без помощи $.when). По-идее это должно входить в Deferred. А сейчас оно получается так же неудобно, как и раньше.
А синтаксически корректный пример, как с then это может быть удобнее, можно привести?
Что-то вроде:
Как-то так. О чем-то таком уже писали на Хабре и вроде как оно реализовано в 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 просто не успели это сделать к выходу. Или же просто я этого не нашёл
… или ввести бы для $.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(...)
Интересное предложение. Да, в jquery.Deferred сейчас возврат из «слушателей» никак не учитывается. Думаю, разработчики сделали выбор в пользу простоты реализации, опустив некоторые фичи.
Надо будет на досуге подумать, что тут можно сделать, кроме вложенных функций.
Надо будет на досуге подумать, что тут можно сделать, кроме вложенных функций.
Можно порадоваться, в версии 1.6 сделали почти то, что ты и просил: habrahabr.ru/blogs/jquery/118713/#deferredpipe
Sign up to leave a comment.
jQuery Deferred Object (подробное описание)