gpt4 book ai didi

angularjs - angular 然后从服务中捕获成功错误

转载 作者:行者123 更新时间:2023-12-01 04:53:20 25 4
gpt4 key购买 nike

恐怕我已经陷入了递归 promise 的陷阱。

我有一个处理我的 api 的服务。 (它有一个额外的 promise 层,这样如果 api 脱机,我可以切换回本地 json。(不确定它有多么必要)-为了简单起见,我应该消除它)。
然后我在我的 Controller 中得到了 promise 的异步调用。

只要我得到我期望的数据,这一切都很好,但它不能很好地处理错误。当我得到 400 和 500 时,它不会通过 toastr 向用户发送错误消息。

遗憾的是,这不是一个完全兼容的 RESTful api。我得到的 400 错误很简单

{"Message":"No packages found"}

我真的不知道如何让它按照它应该的方式运行,并用 then/catch 替换成功/错误(根据 Angular 最佳实践)。

这是一个典型的服务调用:
var _getPackagesPage = function (options) {

var pageSize = options.data.pageSize;
var page = options.data.page -1;
return $q (function(resolve, reject) {
switch (dataSource) {
case 'api'://staging - live api data
return $http({
method: 'get',
url: serviceBase + 'api/Packages?pageSize=' + pageSize + '&page=' + page
}).then(function(results) {
resolve(results);
});
break;

default: // dev - local json

$.getJSON('Content/data/Packages.json', function (json) {
var pageSize = options.data.pageSize;
var page = options.data.page;
var newjson = json.splice(page*pageSize,pageSize);
resolve(newjson);
});
}
});
};

以及 Controller 中的典型调用:

( 选项 是交回我的数据网格(Kendo)的数据对象)
    vm.getPackages = function(options) {
return packagesService.getPackagesPage (options)
.then(function(results) {
options.success(results.data.Items);
})
.catch(function(error) {
options.error(error);
toastr.error(error.Message);
});
};

我怎样才能清理它?

[更新] 根据答案 1 尝试修复,低于

服务:
    var _getOrdersPage = function (options) {

var deff = $q.defer();
var pageSize = options.data.pageSize;
var page = options.data.page -1;
return $http({
method: 'get',
url: serviceBase + 'api/Packages?pageSize=' + pageSize + '&page=' + page
})
.then(
function(results) {
deff.resolve(results);
},
function(ex){
deff.reject(ex);
});
return deff.promise;
};

Controller :
    vm.getOrders = function (options) {
return ordersService.getOrdersPage (options)
.then(function(results) {
console.log("results!");
console.log(results);
})
.catch(function(error) {
console.log("error!");
console.log(error);
});
};

结果是:

GET http://< myURL >/api/Packages?pageSize=20&page=0 400 (Bad Request)

results!

undefined

最佳答案

为简洁起见,我正在移除开关盒。

var _getPackagesPage = function (options) {

var pageSize = options.data.pageSize;
var page = options.data.page -1;
var deff = $q.defer();

$http({
method: 'get',
url: serviceBase + 'api/Packages?pageSize=' + pageSize + '&page=' + page
}).then(
function(results) {
deff.resolve(results);
},
function(ex){
deff.reject(ex);
});

return deff.promise;
};

Controller
vm.getOrders = function (options) {
return ordersService.getOrdersPage (options)
.then(
function(results) {
console.log("results!");
console.log(results);
},
function(error) {
console.log("error!");
console.log(error);
});
};

如果您的服务中没有任何逻辑,那么您可以返回 $http 本身,因为 $http inturn 是一个 promise :
var _getPackagesPage = function (options) {

var pageSize = options.data.pageSize;
var page = options.data.page -1;

return $http({
method: 'get',
url: serviceBase + 'api/Packages?pageSize=' + pageSize + '&page=' + page
});

};

关于angularjs - angular 然后从服务中捕获成功错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39194190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com