[英]Generating and saving a list of ParseObjects within a Parse.Cloud.httpRequest in a cloud function
所以,我正在定義一個雲函數,它應該調用foursquare api並從返回的JSON生成一個餐館列表(每個餐館都是一個ParseObject)。 我成功地做到了這一點,但是在嘗試將這些對象保存到我的數據庫並通過調用response.success()將它們發送回我的手機時遇到了問題。 下面的大代碼塊將列表保存到我的數據庫中,但是如果我嘗試的話
Parse.Object.saveAll(restaurants)
response.success(restaurants)
我在保存所有餐館之前結束了這個功能。 我嘗試使用這一行代替
Parse.Object.saveAll(restaurants).then(response.success(restaurants))
,但只有一半的餐館在我收到錯誤之前得到保存“失敗:未捕獲嘗試使用指向未保存的新對象的對象保存對象”。 如果我在不嘗試保存列表的情況下調用response.success(餐館),我也會收到此錯誤。 我讀到這是解析中的一個錯誤,阻止某人打印或傳遞未保存的ParseObjects。 有任何想法嗎? 我也嘗試在http請求上使用.then,但是我遇到了同樣的問題或者出現了新的錯誤:“com.parse.ParseException:i / o failure:java.net.SocketTimeoutException:read timed out。”
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 + "§ion=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);
}
});
});
我相信你的問題是當你的httpRequest()完成時你沒有從Parse.Object.saveAll(餐館)返回Promise。 嘗試返回saveAll()保證並查看它是否完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.