从Deferred.Done中检索返回值

时间:2015-02-02 19:17:03

标签: javascript jquery

基本上我有各种javascript控制器。基本HTML文档调用一个javascript对象,该对象调用另一个调用Ajax调用并返回Deferred对象的javascript对象。然后我在该数据返回时调用.done并处理它。当我处理它时,我检查数据是否包含错误。我希望能够将链条中的真或假一直返回到基本HTML文档以执行一些UI行为,但我对Deferred / promise的想法很新。正如您从最后一级的代码示例中看到的那样。我只是返回def.done(AfterServerSuccess)并返回基地以填充containsError。这似乎返回一个空的Deferred对象。我觉得有一个简单的答案。我已经尝试了不同的方法来从完成方法中获取布尔值,但我无法弄明白。有人可以在这里给我一些指导吗?

 var containError =    `myJavascriptController.CheckItemsForErrors(dayparts, false);`

MyJavascriptController.js:

  var CheckItemsForErrors = function (list, source)
        {
           return mySelectionController.CheckForErrors("CheckForErrors", list, source);
        };

mySelectionController.js:

    var CheckForErrors= function (listItems, source)
        {


            if (listItems.length > 1)
            {
                           //Ajax call returns Deferred object
                var def = _manager.SendDataToServer(listItems);

                   return def.done(AfterServerSuccess)
}

 var AfterServerSuccess = function (data)
        {
            _.each(data, function (item)
            {
                if (item.Error == true)
                {
                    return true;
                }

            });

            return false;
        };

1 个答案:

答案 0 :(得分:1)

我建议做一些关于promises和deferred对象的阅读。 This是入门的好资源。

基本上,您需要使CheckForErrors函数返回延迟对象/承诺,这将由AfterServerSuccess函数的结果解决。然后,在顶层,你可以写这样的东西来得到错误结果:

var containError = false;
myJavascriptController.CheckItemsForErrors(listItems, source)
    .done(function (result) {
        containError = result;
        // Do other stuff here...
    });

从这一小段代码向后工作,您将了解承诺/延迟对象的工作方式。