将延迟对象作为失败返回
Return a deferred object as a fail
如果延迟对象失败,我似乎无法返回它。我有一个非常嵌套的 ajax 请求进入队列,所以我需要一种方法将请求作为延迟对象返回。如果请求成功,一切都很好,但我坚持传播失败。
https://jsfiddle.net/3wtady9r/
function doAjax(file) {
var defer = $.Deferred();
var fakeFile = file;
var data = null;
ajax();
function ajax() {
return $.get(fakeFile)
.done(function(data) {
data = data;
defer.resolve(data);
})
.fail(function() {
defer.fail();
})
}
return defer.promise(data);
}
var thisWillWork = '';
doAjax(thisWillWork)
.done(function() {
console.log('done')
})
.fail(function() {
console.error('fail')
})
.always(function() {
console.log('always')
})
var thisWontWork = 'fakeFile.html'
doAjax(thisWontWork)
.done(function() {
console.log('done')
})
.fail(function() {
console.error('fail')
})
.always(function() {
console.log('always')
})
当我做doAjax(thisWontWork(时,我希望得到控制台错误和.always,但都没有触发。
那里有很多不同的问题。
-
fail
是一种在承诺被拒绝时调用处理程序的方法。要拒绝它,请使用reject
。 -
您不想在最后将
data
传递到defer.promise
。 -
您根本不想要或不需要
data
变量,只需要您在success
中收到的参数。 -
由于从不使用从自己的
ajax
函数返回的值,因此无需返回它。 -
jQuery的
ajax
已经返回了一个承诺,它执行了你的承诺,所以你的承诺可以完全删除。这种情况经常发生,有一个反模式以它命名。每當你認為你需要創造一個承諾時,停下來想:我已經有一個承諾嗎?当然,有时答案是否定的,但通常是肯定的。:-)
截至第 #5 点,我们最终得到:
function doAjax(file) {
var fakeFile = file;
return $.get(fakeFile);
}
。当然,这意味着您根本不需要doAjax
。只需致电$.get
.
但是,如果由于某种原因你没有分享你需要自己的承诺,那么只需第 1-4 点:
function doAjax(file) {
var defer = $.Deferred();
var fakeFile = file;
ajax();
function ajax() {
$.get(fakeFile)
.done(function(data) {
defer.resolve(data);
})
.fail(function() {
defer.reject();
});
}
return defer.promise();
}
它应该是defer.reject();
而不是defer.fail();
您也可以像在 defer.resolve(( 中一样在拒绝中添加数据。
相关文章:
- 如何避免JSON.stringify在特殊情况下返回undefined,从而为JSON.parse创建字符串失败
- Angular Cross Origin Request CORS失败,但节点http.get()成功返回
- 承诺,如果第一个失败,则返回第二个承诺结果
- AngularJS$http返回200正常,但失败了
- 测试Ember.JS应用程序失败,返回ReferenceError:未定义Ember
- Parse.com失败,返回:ReferenceError
- 返回按钮回调函数在特定情况下失败或未启动
- 循环遍历所有字段,如果任何一个字段的验证失败jquery,则返回false
- 如何将 $http.put 封装到一个函数中,该函数执行某些操作,然后返回通过或失败的承诺
- IE7 jquery 选择器返回“失败”
- 当返回的查询不为空时,来自 php 的 MS SQL Server 过程失败并显示 500
- 将延迟对象作为失败返回
- 万一函数失败,什么是好的返回值
- Javascript 多维数组返回第一个值,然后失败
- 失败事件返回 false 值的制表符,当使用辐射窗口时
- 节点脚本需要向调用它的 Angular 服务返回成功/失败
- 绑定事件在Chrome上失败,但在浏览器返回时在Firefox中正常
- Angularjs http.get 失败(但我看到数据被返回)
- 尝试使用韦氏词典API返回的XML,但请求失败.返回状态为0.该怎么做
- Angularjs的HTTP POST调用在部署中验证登录失败-返回400错误