【发布时间】:2011-09-07 11:11:49
【问题描述】:
我一直在尝试了解 jQuery 的 Deferred 功能的好处。如果我理解正确 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;
}
相反,正确的方法是继续使用回调,但这次只解析延迟对象,以便我可以在以后附加更多成功/失败方法,如果我愿意的话?
我理解正确了吗?编写上面代码的正确方法是什么,或者我完全误解了基本原理?提前致谢。
【问题讨论】:
标签: javascript jquery jquery-1.5 jquery-deferred