Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.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
Javascript 在云函数中的Parse.Cloud.httpRequest中生成并保存Parse对象列表_Javascript_Android_Database_Parse Platform - Fatal编程技术网

Javascript 在云函数中的Parse.Cloud.httpRequest中生成并保存Parse对象列表

Javascript 在云函数中的Parse.Cloud.httpRequest中生成并保存Parse对象列表,javascript,android,database,parse-platform,Javascript,Android,Database,Parse Platform,因此,我定义了一个云函数,它应该调用foursquare api,并从返回的JSON生成餐厅列表(每个餐厅都是一个ParseObject)。我成功地做到了这一点,但在尝试将这些对象保存到数据库并通过调用response.success()将其发送回手机时遇到了问题。下面的大代码块将列表保存到我的数据库中,但如果我尝试 Parse.Object.saveAll(restaurants) response.success(restaurants) 在保存所有餐厅之前,我结束该功能。我试着用这条线代

因此,我定义了一个云函数,它应该调用foursquare api,并从返回的JSON生成餐厅列表(每个餐厅都是一个ParseObject)。我成功地做到了这一点,但在尝试将这些对象保存到数据库并通过调用response.success()将其发送回手机时遇到了问题。下面的大代码块将列表保存到我的数据库中,但如果我尝试

Parse.Object.saveAll(restaurants)
response.success(restaurants)
在保存所有餐厅之前,我结束该功能。我试着用这条线代替

Parse.Object.saveAll(restaurants).then(response.success(restaurants))
,但只有一半的餐厅在我收到错误“失败原因:Uncaught尝试使用指向新的未保存对象的指针保存对象”之前被保存。如果我调用response.success(餐厅)而不尝试保存列表,我也会收到此错误。我读到这是解析中的一个bug,它阻止某人打印或传递未保存的解析对象。有什么想法吗?我还尝试在http请求上使用.then,但我遇到了相同的问题或新的错误:“com.parse.ParseException:I/o失败:java.net.SocketTimeoutException:Read timeout。”

Parse.Cloud.define(“callFourSquare”),函数(请求、响应){
//使用当前位置分析地质点以进行搜索
var geo=request.params.location;
var geoJson=geo.toJSON();
变量url=”https://api.foursquare.com/v2/venues/explore?ll=“+geoJson.latitude+”,”
+geoJson.longide+“§ion=food&sortByDistance=1&limit=50&venuePhotos=1&categoryId=444b7105d754a06374d81259&client_id=c043ajbwkipbaxohlpa0t40sg5l0ggmqrwcciktrrvlfpth”
+“&client_secret=Y1GZZRHXEW1I3SQL3LTHQFIZRDCTRG12FVIQI5QGUX0VIZP&v=20140715”;
console.log(url);
//调用FourSquare api,返回餐厅列表及其详细信息
Parse.Cloud.httpRequest({
方法:“获取”,
url:url,
成功:函数(httpResponse){
var=[];
var json=httpResponse.data;
var=json.response.groups[0]。项;
控制台.日志(场地.长度)
对于(i=0;i<1.length;i++){
地点=地点[i]。地点;
var RestaurantObject=Parse.Object.extend(“餐厅”);
var rest=新餐厅对象();
试一试{
rest.set(“地理定位”,
新的Parse.GeoPoint({纬度:venture.location.lat,
经度:地点.location.lng});
}捕获(错误){}
试一试{
rest.set(“地址”,vention.location.address+“”+vention.location.formattedAddress[1]);
}捕获(错误){}
试一试{
rest.set(“电话号码”、地点、联系人、格式电话);
}捕获(错误){}
试一试{
rest.set(“网站”,地点.url);
}捕获(错误){}
休息。集合(“名称”,地点。名称);
rest.set(“lowerName”,地点.name.toLowerCase());
试一试{
剩余。设置(“价格水平”,地点。价格。层级);
}捕获(错误){}
试一试{
休息设置(“评级”,场馆评级/2);
}捕获(错误){}
试一试{
rest.set(“storeId”,地点id);
}捕获(错误){}
试一试{
rest.set(“图标”,地点。照片。组[0]。项目[0]。前缀+“原始”
+地点。照片。组[0]。项目[0]。后缀)
}捕获(错误){}
餐厅。推(休息);
}
Parse.Object.saveAll(餐厅);
},
错误:函数(httpResponse){
response.error(“请求失败,响应代码:+httpResponse.status+”消息:”
+httpResponse.text);
}
});
});

我认为您的问题在于,当您的httpRequest()完成时,您没有返回Parse.Object.saveAll(餐厅)的承诺。尝试返回saveAll()承诺,看看它是否完成。

错误“尝试使用指向新的未保存对象的指针保存对象”是关键,我想,您的餐厅类中是否有指针类型的列?不,我所有的列都是字符串和数字的混合体(例如restaurantName、phonenumber、网站、评级等),以及一个地质点。
Parse.Cloud.define("callFourSquare", function(request, response) {
//The Parse GeoPoint with current location for search
    var geo = request.params.location;
    var geoJson = geo.toJSON();
    var url = "https://api.foursquare.com/v2/venues/explore?ll=" + geoJson.latitude + ","
        + geoJson.longitude +         "&section=food&sortByDistance=1&limit=50&venuePhotos=1&categoryId=4d4b7105d754a06374d81259&client_id=    C043AJBWKIPBAXOHLPA0T40SG5L0GGMQRWQCCIKTRRVLFPTH" 
        + "&client_secret=Y1GZZRHXEW1I3SQL3LTHQFNIZRDCTRG12FVIQI5QGUX0VIZP&v=20140715";
        console.log(url);
    //Call to FourSquare api, which returns list of restaurants and their details
    Parse.Cloud.httpRequest({
        method: "GET",
        url: url,
        success: function (httpResponse) {
            var restaurants = [];
            var json = httpResponse.data;
            var venues = json.response.groups[0].items;
            console.log(venues.length)
            for(i = 0; i < venues.length; i++) {
                venue = venues[i].venue;

                var RestaurantObject =  Parse.Object.extend("Restaurant");
                var rest = new RestaurantObject();
                try {
                    rest.set("geoLocation", 
                    new Parse.GeoPoint({latitude: venue.location.lat, 
                        longitude: venue.location.lng}));

                } catch(err) {}
                try {
                    rest.set("address", venue.location.address + " " +     venue.location.formattedAddress[1]);
                } catch(err) {}
                try {
                    rest.set("phoneNumber", venue.contact.formattedPhone);
                } catch(err) {}
                try {
                    rest.set("website", venue.url);
                } catch(err) {}
                rest.set("name", venue.name);
                rest.set("lowerName", venue.name.toLowerCase());
                try {
                    rest.set("priceLevel", venue.price.tier);
                } catch(err) {}
                try {
                    rest.set("rating", venue.rating/2);
                } catch(err) {}
                try {
                    rest.set("storeId", venue.id);
                } catch(err) {}
                try {
                    rest.set("icon", venue.photos.groups[0].items[0].prefix + "original"
                        + venue.photos.groups[0].items[0].suffix)
                } catch(err) {}

                restaurants.push(rest);

            }
            Parse.Object.saveAll(restaurants);
        },
        error: function (httpResponse) {
            response.error("Request failed with response code:" + httpResponse.status + "     Message: "
                + httpResponse.text);
        }
    });
});