Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parse platform beforeSave上的谷歌地理定位_Parse Platform - Fatal编程技术网

Parse platform beforeSave上的谷歌地理定位

Parse platform beforeSave上的谷歌地理定位,parse-platform,Parse Platform,我正在尝试在解析云的beforeSave事件上使用GoogleMapsAPI进行地理定位。问题是进程之间没有触发httpRequest 这是我的密码: Parse.Cloud.beforeSave('SearchList', function (request, response) { if ( ! request.object.isNew()) response.success(); var SearchList = Parse.Object.extend(

我正在尝试在解析云的beforeSave事件上使用GoogleMapsAPI进行地理定位。问题是进程之间没有触发httpRequest

这是我的密码:

Parse.Cloud.beforeSave('SearchList', function (request, response) {

    if ( ! request.object.isNew())
        response.success();

    var SearchList = Parse.Object.extend('SearchList');
    var query = new Parse.Query(SearchList);

    query.equalTo('Id', request.object.get('Id'));
    query.first({
        success: function (entry) {

            if (entry) {

                var address = request.object.get('Street1') + ', ' + request.object.get('Street2') + ', ' + request.object.get('Street3') + ', ' + request.object.get('Suburb') + ', ' + request.object.get('State') + ', ' + request.object.get('Postcode');

                for (var attr in request) {
                    entry.set(attr, request[attr]);
                }
                entry.set('Address', address);

                if (request.object.get('Type') === 'Bus') {

                    address = request.object.get('Street1') + ', ' + request.object.get('State');
                    console.log('Bus Address: ' + address);
                    Parse.Cloud.httpRequest({
                        method: 'POST',
                        url: 'https://maps.googleapis.com/maps/api/geocode/json',
                        params: {
                            address : address,
                            key: 'my-api-key'
                        },
                        success: function(httpResponse) {

                            var response = httpResponse.data;

                            if (response.status === 'OK') {
                                var langLat = response.results[0].geometry.location;
                                console.log(langLat);

                                entry.set('Location', new Parse.GeoPoint({ latitude: Number(langLat.latitude), longitude: Number(langLat.longitude) }));
                                entry.save();
                                response.error('Updated Existing Entry');
                             }

                        },
                        error: function(httpResponse) {
                            entry.set('Location', null);
                            entry.save();
                            response.error('Updated Existing Entry');
                        }
                    });
                } else {
                    entry.set('Location', new Parse.GeoPoint({ latitude: Number(request.object.get('Latitude')), longitude: Number(request.object.get('Longitude')) }));
                    entry.save();
                    response.error('Updated Existing Entry');
                }

            } else {
                response.success();
            }

        },
        error: function (err) {
            response.error('Could not validate uniqueness for the Id object.');
        }
    });

});
因此,我的代码所做的是在保存过程中,检查条目是否已经存在于数据库中。如果它存在,我只需更新它的值,然后返回一个
响应。error
告诉
parseObject.save
不继续保存数据,因为它已经存在,否则我返回一个
响应。success
告诉
parseObject.save
继续保存数据。所以在这个过程中,有些数据没有lat-long值,所以我必须检查它们是否有lat-long,如果没有,我想使用条目的地址w/Google Maps API进行地理定位查询,以检索lat-long值

关于如何在beforeSave期间使用Google Maps API执行地理定位,有什么想法吗


谢谢

当您调用reaponse success或error时,表示函数已完成,因此之后的任何操作都不能保证完成,特别是在异步的情况下


您应该发出异步请求并更新传递的对象,然后返回success以保存它。

当对象是新的,因此不应该存在于数据存储中时,为什么要查询以查找该对象?因此,如果它不是新的,什么也不做,如果它是新的,找到现有的项目(不应该存在),只有在我们找到它时才发出请求。这似乎不合逻辑,所以你需要更多地解释你在做什么detail@Wain对不起,我没有很好地解释我的代码的作用。因此,在这一部分中,我检查了新条目是否已经存在,如果它确实存在,我只需更新值并执行一个
响应。error
,它向
parseObject.save()
发出信号,表示不再继续保存对象,否则我返回一个
响应。success
告诉
parseObject.save()
继续保存新数据。我之所以想进行地理定位搜索,是因为我需要为现有数据获取一个latlong点,因为有些数据不包含latlong,所以我必须执行一项检查,检查它们是否包含latlong值。多亏了这个想法,我必须实现一个Parse.Promise请求,并将请求链接起来。它现在可以正常工作了。