Есть ли способ связать JQuery Отсрочки для выполнения один за другим без обратных пирамид?JQuery Chaining Отложенные без пирамид обратного вызова
Прямо сейчас я должен сделать что-то вроде этого:
$.Deferred(function(dfd) {
setTimeout(function() {
console.log('Foo');
dfd.resolve();
}, 1000);
})
.done(function() {
$.Deferred(function(dfd) {
console.log('Bar');
dfd.resolve();
}).done(function() {
console.log('done');
});
});
Выход: Foo, Bar, сделано
Я хочу, чтобы иметь возможность сделать что-то вроде этого:
$.Deferred(function(dfd) {
setTimeout(function() {
console.log('Foo');
dfd.resolve();
}, 1000);
})
.then($.Deferred(function(dfd) {
console.log('Bar');
dfd.resolve();
}))
.done(function() { console.log('done') });
Нежелательный выход: Бар, Foo, сделано
Спасибо.
Примечание: Эта функция работает только в JQuery 1.8+. До этого вам нужно использовать '.pipe()'. – MgSam
И до 1.6/1.7 '.pipe()' не будет работать. Если не указано, я предполагаю, что вопросы jQuery относятся к последней версии, и в этом случае этот ответ правильный и должен быть помечен как таковой. –
Извините, я не маркировал его, потому что после дальнейшего тестирования я обнаружил, что он не работает. Первая причина заключалась в версии JQuery, но второй причиной было отсутствие ключевого слова 'return', которое с тех пор исправлено. – MgSam