【发布时间】:2015-11-21 08:46:47
【问题描述】:
我正在尝试实现 UI-router resolves,即使 API 调用失败,它也会返回结果。我们的应用程序具有后端权限,如果调用失败,我仍然需要显示嵌套页面(如果解析调用正常失败,则不会加载,除非它被包装到 $q 承诺中。我这样实现它$http:
resolve: {
kittens: ["$q", "$timeout","$http", function ($q, $timeout, $http,) {
var url = "some api url"
return $http.get (url)
.then(function(result){ return {status:true , data: result} },
function(){ return {status:false} }); //on failure, return this
}],
}
上面的工作完美 - 它返回我在调用成功和失败时需要的内容,但是,如果我用 Restangular 尝试它似乎会失败,下面的代码工作正常:
kittens: function (Restangular) {
return Restangular
.one('stuff', 999999999999)
.all('stuffInStuff').getList()
.then(function (result) {
return result;
});
},
但是如果我用上面的方法试试这个:
.then(function (result) {
return result;
}, function(error){return error})
失败没有返回任何东西,控制器也没有被实例化。我不明白为什么会这样。我认为 $http.get() 和 Restangular.one().all().getList() (例如)都是等效的承诺,要么返回结果,要么失败。有什么不同?如何使用 Restangular 在调用失败时提供解析值?
编辑:顺便说一句,我确实阅读了this post,并且我知道如果未包装 UI 路由器解析,则如果承诺被拒绝,它将失败,但我似乎没有完全了解如何处理它与 Restanagular...
编辑 3:这也失败了:
.then(function (result) {
return result;
})
.catch(function (error) {
return error;
})
【问题讨论】:
-
你能试试
.catch吗? -
不知道这将如何工作。我只在 C# 的 try catch 的上下文中理解 catch。不能说我理解 $q 过去的链接承诺和使用 .all。
-
@PankajParkar:catch 基本上是 Restangular 的第二个函数的版本,通常可以处理错误吗?已编辑的帖子。
-
在 github 上发现问题,你可以阅读这个github.com/mgonto/restangular/issues/451
-
我只是读了,不明白它是如何应用的(我不是粗鲁,我真的很感谢你的回复,可能只是我不明白)。但是从阅读链接看来,您之前没有这样做 .then(function(){return result}) - 它会在成功调用时自动执行。现在您必须运行 .then 语句,但我 am 在这里运行它。也许我不清楚你的意思,但我通读了一遍。
标签: angularjs angular-promise restangular