基本上我有各种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;
};
答案 0 :(得分:1)
我建议做一些关于promises和deferred对象的阅读。 This是入门的好资源。
基本上,您需要使CheckForErrors
函数返回延迟对象/承诺,这将由AfterServerSuccess
函数的结果解决。然后,在顶层,你可以写这样的东西来得到错误结果:
var containError = false;
myJavascriptController.CheckItemsForErrors(listItems, source)
.done(function (result) {
containError = result;
// Do other stuff here...
});
从这一小段代码向后工作,您将了解承诺/延迟对象的工作方式。