У меня есть функция в виде:Возвращение отложенного объекта обещания и разрешить его
$.get_members = function() {
var group_id = $('#gid').val();
if($(this).val() == group_id)
return;
var deferr = $.Deferred();
$.get(url)
.done(function() {
...
deferr.resolve();
});
return deferr.promise();
}
А теперь вопрос: как справиться с ситуацией, когда group_id == $(this).val()
? Я хотел бы сделать просто:
var members_deferr = $.get_members();
members_deferr.done(function() {
...
});
Одна идея состоит в том, чтобы проверить тип возвращаемого значения, но не очень приятно. Вторая идея заключается в разрешении отложенных в setTimeout
, но я не знаю, безопасно ли это.
Любые другие идеи?
Как это работает? Я думал, что если я буду называть 'resolve()' перед связыванием функции с 'done()' обратным вызовом, 'done()', конечно, будет вызываться, но его еще не привязано (поскольку его связали после получения 'deffer.promise() '). Я ошибаюсь? – marxin
Проверьте, он работает. Связывание обратных вызовов, таких как .done (...), сбой, всегда работает даже после разрешения/отклонения. Подумайте о реализации следующим образом: Deferred.done = function (callback) {if (this.state === 'pending') this.waitingDones.push (callback); else if (this.state === 'successed') callback(); } –
Да, он работает как (не) ожидаемый :) Спасибо. – marxin