为什么$http.Get不需要返回任何东西
Why does $http.get not need to return anything?
我正在制作一个angular应用程序,我有一个正在调用服务的控制器。控制器向服务发送一个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,并找出返回给我的确切内容,以及如何访问返回对象的属性。
我的问题是:
- 为什么我的
$http .success
呼叫不需要return data;
?在什么情况下我需要这样做? - 是否有一种方法可以从
$http .success
调用中的数据对象返回特定属性,以便我不必在控制器方法中调用data.data.uri
?或者我可以在返回到控制器之前修改返回的JSON有效负载吗?
当从promise中使用.success
或.error
时,Angular对返回值不做任何处理,所以返回任何值都没有意义。传递给.success/.error
回调函数的值是原始承诺的结果。
如果您使用.then(success,error)
,那么返回值将传递给承诺链中的下一个承诺。
.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;
});
}
相关文章:
- AJAX:$_GET不返回任何值
- document.styleSheets不返回任何内容
- 在解析对象.save()中;没有返回任何原因
- PhantomJs在控制台中发出http请求时不会返回任何状态
- 为什么这个array.filter总是不返回任何内容
- IE8DOM转换XML,并且不从jQueryfind()或filter()返回任何内容
- 比较数组中的连续元素不会返回任何结果(javascript)
- WebKitBrowser.StringByEvaluatingJavaScriptFromString 不返回任何值
- Ajax 不返回任何结果
- 我的 API 调用没有返回任何内容
- Javascript函数img.onload不返回任何内容(真或假)
- 为什么我的 sinon 假服务器不返回任何内容
- beforeSave导致查询不返回任何内容
- Ajax对PHP页面的调用总是不返回任何内容,即使PHP页面有回声
- 控制器的Helper函数不返回任何内容
- 函数不返回任何内容
- Breeze.js getEntities不返回任何实体
- 自定义Angular.js过滤器在IE8中不返回任何内容,在Chrome/FF中运行良好
- Dexie.exists()方法不返回任何内容(Dexie.js&IndexedDB)
- getElementsByClassName未返回任何内容