从Deferred.Done中检索返回值

基本上我有各种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; }; 

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

基本上,您需要使CheckForErrors函数返回延迟对象/ promise,这将由AfterServerSuccess函数的结果解析。 然后,在顶层,您可以编写类似这样的内容来获取错误结果:

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

从这一小段代码向后工作,你会感受到promises / deferred对象的工作方式。