![](/img/trans.png)
[英]Angular 2 Http Request to Promise returns zone obj instead of actual data
[英]AngularJS: $routeProvider when resolve $http returns response obj instead of my obj
我正在尝试解决几个Ajax调用,以便在执行控制器(及其提供的指令)之前可以使用控制器需要的数据。 执行的顺序有效,但是,没有返回我创建的对象,而是将注入到控制器中的结果是$ http的响应对象:
{
config: { … },
data: { … },
headers: { … },
status: 200
}
我的代码基本上看起来像:
app.config([
'$routeProvider', function($routeProvider)
{
$routeProvider
.when('/path', {
…,
"resolve": {
"data": [
'$http',
function($http)
{
return $http
.get('/api/data')
.success(function(data,status) { return data.rows[0]; })
.error(function(data,status) { return false; });
}
]
}
});
}
]);
我傻吗? $ http成功的返回值不应该是$ http返回的值吗?
我也试过
…
"resolve": {
"data": [
'$http',
function($http)
{
var response;
$http
.get('/api/data')
.success(function(data,status) { response = data.rows[0]; })
.error(function(data,status) { response = false; });
return response;
}
]
}
但是然后,注入到我的控制器中的data
对象是不确定的(我猜是因为$ http是异步的,而且$ http没有阻止resolve
-因此它在$ http准备就绪之前就返回了)。
PS $ http的同步性应该在其options对象中定义!
app.config([
'$routeProvider', function($routeProvider)
{
$routeProvider
.when('/path', {
…,
"resolve": {
"data": [
'$http',
function($http)
{
return $http
.get('/api/data')
.then(
function success(response) { return response.data.rows[0]; },
function error(reason) { return false; }
);
}
]
}
});
}
]);
感谢Ajay beniwal的指针和Mark Rajcok的指针 。
PS then()
在$ q的page中记录 。
$ http @returns {HttpPromise}返回一个{@link ng。$ q promise}对象,该对象具有标准的
then
方法和两个特定于http的方法:success
和error
。then
方法接受两个参数成功和错误回调,将使用响应对象调用该回调。success
和error
方法采用单个参数-该函数将在请求成功或失败时分别调用。 传递给这些函数的参数是传递给then
方法的响应对象的结构化表示。 响应对象具有以下属性:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.