angularjs - 使用 Google map API 服务回调函数创建 Angular 服务

标签 angularjs google-maps-api-3

我正在尝试创建一个使用谷歌地图地理编码器的 angular.service ,但是我发现谷歌的回调是在服务函数执行后执行的。

Controller

app.controller( 'AppCtrl',['geocoder',function AppCtrl (geocoder) {
   var result=geocoder.geocode('greek');
   console.log(result);
});

服务

app.service('geocoder',function() {
            this.geocode=function(address) {
                    var geocoder = new google.maps.Geocoder();
                    geocoder.geocode( { 'address': address}, function(results, status) {
                            if (status == google.maps.GeocoderStatus.OK) {
                                    console.log(results);
                                    return results;
                            } else {
                                    return ('Geocode was not successful for the following reason: ' + status);
                            }
                    });
            };
    });

问题是, Controller 中的console.log(result)输出未定义,而服务中的console.log(results)在调用该函数后从google返回结果。即回调函数没有及时返回结果。

有办法解决这个问题吗? 谢谢。

最佳答案

回调是处理网络\Web 调用的异步性质的方法。您需要将 geocode 方法的实现更改为

  • 当收到响应时调用回调函数。
  • 返回一个可在调用函数中使用 then 函数处理的 Promise。

我发现这篇博文详细介绍了这两种方法 http://markdalgleish.com/2013/06/using-promises-in-angularjs-views/

关于angularjs - 使用 Google map API 服务回调函数创建 Angular 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18941853/

相关文章:

javascript - 在 Google Maps API 中使用事件监听器,当我单击时没有任何反应

javascript - Google map API 不显示计算路线上的线路

javascript - 在匿名函数中加载谷歌地图

javascript - Meteor 具有 blaze(网络)和 Angular(移动)

javascript - 未调用地理编码反向回调函数

javascript - 在单元测试中,我如何将原始对象与范围副本进行比较并避免 Angular $$hashKey

javascript - 通过 objectId 从 Parse.com 集合中检索特定对象的列表

javascript - 如何将 Google Places API 限制为国家/地区并且仅通过邮政编码进行搜索?

javascript - ng 类访问元素文本

android - 使用 angularjs 和 cordova 推送通知插件恢复时路由更改的问题