Я пытался понять преимущества отложенной функциональности jQuery. Если я правильно понимаю, Deferred не предлагает альтернативу обратным вызовам, а предлагает лучшее управление обратными вызовами? Если я пишу метод и хочу быть уверенным, что он завершил выполнение перед выполнением другой задачи, мне все равно потребуется обратный вызов для установки deferred.resolve
? Вот пример кода, чтобы проиллюстрировать то, что я считаю правильным:
Это родительская функция. Я хочу убедиться, что « AddItemsToList » завершен, прежде чем выбрать по умолчанию. (Это не настоящая функция, просто пример).
function PopulateListAndSelectDefault(list,default)
{
var resultObject = AddItemsToList($('#myList'), list);
successObject.Success(function(){
SelectItemInList($('#myList'), default);
});
}
Это будет неверный способ записи функции ' AddItemsToList ':
function AddItemsToList (jquerySelectList,items)
{
var result= $.Deferred();
$.each(items, function (i, _property)
{
if (CheckElementIsSelectList(_property.Value))
{
jQueryListItem.append($("<option></option>").attr("value", _property.value).text(_property.DisplayText)); //Add Item
}
}
result.resolve;
return result;
}
Вместо этого, правильный способ состоит в том, чтобы продолжать использовать обратный вызов, но на этот раз разрешить только отложенный объект, чтобы я мог присоединить дальнейшие методы успеха / неудачи позже, если бы я этого пожелал?
Правильно ли я понял? Как правильно написать вышеприведенный код или я полностью неправильно понял основы? Заранее спасибо.