如何在没有数据的情况下处理已解析的$promise
How to handle a resolved $promise with no data
在我的应用程序中,我有一个表单,用户可以在其中添加多条记录。当页面被加载时,我需要发出一个GET请求来检查DB中的现有记录。如果存在记录,我会在页面上填充它们。没问题。
我遇到的问题是,当DB没有现有记录时,服务器会返回204 no Content。在控制器中,成功函数仍然被执行,但没有数据——只有$promise对象和$resolved:true。
这是代码:
工厂:
return $resource (
https://my.backend/api/records/:id",
{},
{
"getExistingRecords": {
method: 'GET',
isArray: false,
params: {id: '@id'},
withCredentials: true}
}
)
控制器:
function initialize(id){
alertFactory.getExistingRecords({id: id})
.$promise
.then(function (records){
if(records){
$scope.existingRecords = records;
}else {
$scope.existingRecords = {};
}
},function(error){
Notification.error(error);
});
}
initialize(id);
当服务器返回"204无内容"时,我从控制台得到这个
控制台图像
处理此问题的唯一方法是检查记录对象的对象属性吗?
例如:
function initialize(id){
alertFactory.getExistingRecords({id: id})
.$promise
.then(function (records){
if(records.recordName){
$scope.existingRecords = records;
}else {
$scope.existingRecords = {};
}
},function(error){
Notification.error(error);
});
}
initialize(id);
还是我错过了什么?
如果您能获得带有响应的状态代码,那会更好。没有直接的方法。但你可以使用拦截程序来解决问题:
var resource = $resource(url, {}, {
get: {
method: 'GET'
interceptor: {
response: function(response) {
var result = response.resource;
result.$status = response.status;
return result;
}
}
}
});
现在你可以:
if(records.$status === 200){
$scope.existingRecords = records;
}else {
$scope.existingRecords = {};
}
如果没有寄存器,我认为应该返回一个空列表。
相关文章:
- AngularJS使用http进行promise处理
- 如何将 Promise 添加到 javascript 中的事件处理程序
- 如何将参数传递到节点's Q库's(去神化)promise处理程序
- Promise处理程序中的同步代码
- 如何使用promise正确处理express.js中的错误(字符串或对象)
- 警告:在处理程序中创建了promise,但未从中返回
- 用于处理带有promise的外部接口中的参数的设计模式
- 如何跨多个函数处理Promise
- 处理猫鼬查询,但使用不同的 JavaScript Promise 实现
- 如果 then 处理程序不返回任何内容,则链式 Promise 的解析值是多少
- Node JS - 处理多个查询(promise,bluebird)
- 如何处理单元测试用例的q和promise
- 使用promise更好地处理AJAX嵌套
- 带有catch的promise中的错误处理
- 使用Q.promise时处理异常的最佳实践
- Promise中处理上下文的正确方式
- 用promise处理promise的数组结果
- 处理Bluebird中的多个嵌套异步操作(promise)
- Javascript promise中的错误处理
- AngularJS-使用promise处理错误