在Angular服务中使用$http和$q的正确方法
Correct way to use $http and $q within Angular service?
我需要进行反向地理编码,并从纬度/经度信息中获取城市名称。
我创建了一个Angular服务,它通过$http调用Google地图api。根据返回的数据,我只需要城市的名称。我一直在与Angular服务中$http的异步特性作斗争。我能让它运行的唯一方法是用$q在服务中创建我自己的承诺。
它有效,但我不确定这是否是正确的方法。任何反馈都是非常受欢迎的!
var app = angular.module('devApp', []);
app.factory('reverseGeoCoder', function($http, $q) {
var service = {
getAddress: function(lat, lng) {
var url = 'https://maps.googleapis.com/maps/api/geocode/json?latlng=' + lat + ',' +lng;
var deferred = $q.defer();
$http.get(url).then(function(data) {
// extract the address and return it to the caller
deferred.resolve(data.data.results[0].formatted_address);
}, function(reason) {
deferred.reject(reason);
});
return deferred.promise;
}
};
return service;
});
app.controller('mainController', function(reverseGeoCoder) {
var vm = this;
reverseGeoCoder.getAddress(47.353166, 8.558387).then(function(data) {
vm.address = data;
}, function(reason) {
console.log('reverse geocoding failed, reason: ' + reason);
});
});
$http
本身已经返回了一个promise,所以您不必返回自己的:
app.factory('reverseGeoCoder', function($http, $q) {
var service = {
getAddress: function(lat, lng) {
var url = 'https://maps.googleapis.com/maps/api/geocode/json?latlng=' + lat + ',' +lng;
return $http.get(url).then(function(data) {
// extract the address and return it to the caller
return data.data.results[0].formatted_address;
}, function(reason) {
return reason;
});
}
};
return service;
});
只要你不断返回promise,你就可以用.then
将它们链接起来,一旦你返回了一个非promise值,它就会被解决/拒绝。
相关文章:
- 当数据库中的某些内容发生变化时调用HTTP方法Meteor.js
- 节点如何将文件传递到http.write方法
- 从javaspring方法管理http.get响应
- Angular Provider/JS-如何访问'叔叔方法'从$http().then()
- 当服务器从 http 更改为 https 时,有哪些可能的方法可以解决问题
- $http-get方法即使使用AngularJS中.Net WebApi的有效json也会失败
- Spring MVC中的PUT方法HTTP Status 400-AngularJS
- 如何在不更改URL的情况下使用HTTP方法POST
- 在Angular服务中使用$http和$q的正确方法
- 了解HTTP请求中的referr/referrer的安全方法是什么
- 无法使用angularjs$http请求将参数发送到服务器操作方法
- javascript注入$http-post方法不起作用
- http模块(node.js和browserfy的)没有't使用方法PATCH写入请求正文
- AngularJs:在内部调用$http或$resource时,让方法同步返回
- 我正在使用 $scope.$apply 在 http 调用后更新对象数组.谁能告诉我正确的方法
- Http 方法差异
- 调用 HTTP get 方法以使用 angular JS 在下拉列表中填充结果
- 如何检查我们是否在使用 angularJs $http方法时出错
- 通过 HTTP 将数据从浏览器流式传输到服务器的方法
- 工厂方法HTTP不工作