Pull to refresh

Comments 16

Отличная статья, теперь понятно где применить.
в конце $.wen() — кажется ошибочка закралась
Спасибо тем, кто заметил и сообщил, — исправил.
Наконец-то они это сделали и, за счёт популярности, унифицировали-стандартизировали.
Больше не придётся изобретать велосипеды :)
смахивает на питонячий Twisted. Не просто смахивает, а один к одному относится. Насколько понимаю, концепцию оттуда и позаимствовали?
ну это-то да, это — славно и все равно.

Только проект CommonJS начался в начале 2009 года, а Twisted — в 2002. Интересно все же, где именно родилась концепция цепочек callback и errback.
кто не положил в закладки — тот нуб
Цепочки вызова выглядят, примерно, так: $.ajax(options).done(function() { }).done(function() { }).fail(function() { });

Это как при работе с DOM элементами: $('div').attr('title', 'test').css('color', 'red').text('123');
Это да, но я про другие цепочки. Хотелось бы вдобавок видеть что-то вида:

ajax1 -> (ajax2, fadeOut, static1) -> ajax3 -> (static2, ajax4) ->…

Т.е. выстраивать такие вот очереди (тем же .then, без помощи $.when). По-идее это должно входить в Deferred. А сейчас оно получается так же неудобно, как и раньше.
А синтаксически корректный пример, как с then это может быть удобнее, можно привести?
Что-то вроде:
$.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 сейчас возврат из «слушателей» никак не учитывается. Думаю, разработчики сделали выбор в пользу простоты реализации, опустив некоторые фичи.

Надо будет на досуге подумать, что тут можно сделать, кроме вложенных функций.
Sign up to leave a comment.

Articles