【问题标题】:jQuery Deferreds and Managing the Order of Code ExecutionjQuery 延迟和管理代码执行顺序
【发布时间】: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


    【解决方案1】:

    这对异步函数最有用。这是一个用于管理回调的实用程序类。

    jQuery.Deferred() 是一个可链接的实用程序对象,可以将多个回调注册到回调队列中,调用回调队列,并中继任何同步或异步函数的成功或失败状态。

       

    jQuery.Deferred() 提供了灵活的方式来提供多个回调,并且这些回调可以被调用而不管最初的回调调度是否已经发生。

    在异步函数中,$.Deferred 的正确用法是在异步操作完成后返回 promiseresolve Deferred。

    将任何值(可能是函数的结果)传递给 .resolve() 并且注册的回调将接收该值。

    例子:

    function getSomething() {
        var deferred = new $.Deferred;
        $.get('/get-something', function(data) {
            deferred.resolve(data);
        });
        return deferred.promise();
    }
    
    myAsynchronousFunction().done(function(data) {
        // ...
    });
    

    在这种情况下,这相当于:

    function getSomething(callback) {
        $.get('/get-something', function(data) {
            callback(data);
        });
    }
    
    myAsynchronousFunction(function(data) {
        // ...
    });
    

    【讨论】:

      猜你喜欢
      • 2016-12-01
      • 2014-09-15
      • 2013-10-02
      • 2013-04-29
      • 2016-12-11
      • 1970-01-01
      • 1970-01-01
      • 2018-12-10
      • 1970-01-01
      相关资源
      最近更新 更多