【发布时间】:2015-04-15 23:24:39
【问题描述】:
我正在使用 durandal.. 我有一个基本控制器来管理对服务器的调用......每个控制器,专门针对每个用例,使用基本控制器来调用服务器。 在基本控制器中,我有以下代码:
self.call = function (url, type, data, success) {
return Q.when(
$.ajax({
...
error: function (jqXHR, textStatus, errorThrown) {
if (jqXHR.status == 500) {
// Do some work
}
}
})
);
然后,在我的专用控制器中,我有
myController.execute(command)
.then(function () {
//Do work ok
})
.fail(function (data) {
//Manage error
});
execute方法,内部调用我一开始写的call方法...
这个解决方案的问题是,当我在基本控制器中管理错误时,我还要在专用控制器中执行fail 代码...
我尝试的另一种方式...在基本控制器中
self.call = function (url, type, data, success) {
return Q.fail(function (jqXHR, textStatus, errorThrown) {
if (jqXHR.status == 500) {
app.showError("a new error");
}
else
throw { "jqXHR": jqXHR, "textStatus": textStatus, "errorThrown": errorThrown };
});
在这种情况下,then 代码在专用控制器中执行。在这种情况下,如何避免停止 Promise 的传播?
谢谢
【问题讨论】:
-
为了继续传播错误(导致
.then履行处理程序不执行),您可以重新抛出错误。 -
不...我要停止传播
-
Q.when和Q.fail是什么,你在用Q吗? -
是的..也许正确的问题是如何阻止Q“promise”的传播
标签: jquery ajax promise durandal