【发布时间】:2012-06-06 06:47:03
【问题描述】:
我有一个$.ajax 承诺并想检查我的(语法上有效的)响应是否包含错误,在这种情况下触发拒绝状态。
我使用过我自己的 Promise 库,它可以轻松处理此类任务。我不太喜欢 jQuery 的 Promise (cache) 实现及其 Deferred object 并且可能忽略了一些东西,因为我很少使用它。我认为要走的路就是使用.then(),这似乎相当复杂:
return $.ajax(...).then(function success(response) {
var problem = hasError(response);
if (problem) {
var error = new $.Deferred;
error.reject(problem);
return error;
} else
return response;
});
这应该返回一个在网络错误或响应问题的情况下被拒绝的承诺。但是返回被拒绝的 deferred 真的是 [only|best|shortest] 的方法吗?
我还想就如何在 ajax 选项本身中处理此类“抛出错误的响应处理程序”提供帮助,但我找不到关于它们的良好文档。
免责声明:不,我无法更改服务器响应。问题检测方法是同步的。我不想使用其他库,我对 jQuery 解决这个问题的方式特别感兴趣。
【问题讨论】:
-
好的,
.then()我的意思是.pipe()在 jQuery 中所做的事情 :-( -
同意!我只能想象如果 JQuery 决定坚持使用非标准规范,我们将面临不同的承诺消耗库的痛苦世界!感谢他们做出了重大改变,以便让我们免于遭受任何痛苦。
标签: javascript error-handling jquery-deferred promise