Я пытался понять преимущества отложенной функциональности 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;
}
Вместо этого правильным способом было бы продолжать использовать обратный вызов, но на этот раз только разрешать отложенный объект, чтобы я мог позже прикрепить дополнительные методы успеха/неудачи, если я того пожелаю?
Я правильно понял? Как правильно написать приведенный выше код, или я совершенно неправильно понял основы? Заранее спасибо.