我正在开发一个有角度的应用程序,我有一个调用服务的控制器。控制器将Url发送到服务。该服务向该Url发送GET请求并接收JSON。因为JSON是针对Http请求的Uri。我从JSON中提取该Uri,然后将浏览器重定向到它。
从端点返回的 JSON 看起来像这样
{
"profile":"...",
"releases_url":"http://...",
"name":"...",
...,
"uri":"http://the-value-i-want-to-return.com",
...,
}
服务代码
// Resolves an API endpoint link to its Http counterpart
function resolveJSONEndpointToHttpUrl(JSONEndpointUrl) {
return $http({ method: 'GET', url: JSONEndpointUrl }).
success(function (data, status, headers, config) {
console.log("resolveJSONEndpointToHttpUrl : data");
console.log(data);
//return data;
}).
error(function (data, status, headers, config) {});
}
控制器代码
function redirectViaJSONLink(url) {
return musicCollectionService.resolveJSONEndpointToHttpUrl(url).then(function (data) {
console.log("redirectViaJSONLink : data");
console.log(data);
console.log("redirectViaJSONLink : data.data");
console.log(data.data);
console.log("redirectViaJSONLink : data.data.uri");
console.log(data.data.uri);
// Perform redirection
// $window.location.href = data.uri;
});
}
正如您所看到的,我正在进行一些日志记录以分解JSON并确切地知道返回给我的内容以及如何访问返回对象的属性。
我的问题是:
return data;
电话中不需要$http .success
?在什么情况下我需要?$http .success
调用中从数据对象返回特定属性,这样我就不必在Controller方法中调用data.data.uri
了?或者我可以在返回到我的Controller之前修改返回的JSON有效负载吗?答案 0 :(得分:0)
当使用来自promise的.success
或.error
时,Angular对返回值不做任何操作,因此返回任何内容都没有意义。传递给.success/.error
回调的值是原始承诺的结果。
但是,如果使用.then(success,error)
,则返回值将传递给promise链中的下一个promise。
例如,您可以修改服务以使用.then
并返回uri:
<强>服务强>
// Resolves an API endpoint link to its Http counterpart
function resolveJSONEndpointToHttpUrl(JSONEndpointUrl) {
return $http({ method: 'GET', url: JSONEndpointUrl }).
then(function (data, status, headers, config) {
console.log("resolveJSONEndpointToHttpUrl : data");
console.log(data);
return data.data.uri;
});
}
<强>控制器强>
然后,在您的控制器中,您可以处理结果:
function redirectViaJSONLink(url) {
return musicCollectionService.resolveJSONEndpointToHttpUrl(url).then(function (uri) {
// Perform redirection
$window.location.href = uri;
});
}