我尝试使用for循环创建帖子,但是当我查看Parse数据库时,只会存储我的数组的最后一个对象。这是我写的代码。
var Reggione = Parse.Object.extend("Reggione");
var creaReggione = new Reggione();
var selectobject = $('#searcharea')[0];
for (var i = 2; i < selectobject.length; i++) {
creaReggione.set("name", selectobject.options[i].text);
creaReggione.save();
谢谢,再见。
答案 0 :(得分:1)
通过创建一个新对象数组,然后将它们保存在一起来做到这一点......
var newObjects = [];
for (var i = 2; i < selectobject.length; i++) {
creaReggione.set("name", selectobject.options[i].text);
newObjects.push(creaReggione);
// ...
}
Parse.Object.saveAll(newObjects);
请记住,如果您希望在saveAll
完成后发生某些事情(例如,如果您使用云代码,请致电response.success()
),那么您应该按照以下方式使用该承诺...
Parse.Object.saveAll(newObjects).then(function(result) {
response.success(result);
}, function(error) {
response.error(error);
});
答案 1 :(得分:0)
在对danhs回答的扩展中,这不起作用的原因是因为从JS客户端到Parse一次只能发生一个事务。
因此,在循环中,第一次调用.save()
并且对象以某种速率保存到Parse(异步),此时循环继续运行并跳过其他保存调用,这些对象不排队等待保存。正如Danh指出的那样,你必须使用Parse的批处理操作一次性将多个对象保存到服务器,为此你可以这样做:
var newObjects = [];
for (var i = 2; i < selectobject.length; i++) {
creaReggione.set("name", selectobject.options[i].text);
newObjects.push(creaReggione);
// ...
}
Parse.Object.saveAll(newObjects);
希望这会有所帮助,我还建议在save方法上查看Parse的回调函数,以获取有关所发生事件的更多详细信息(您可以在此检查错误和成功回调以使调试更容易一些)
这方面的一个例子是用以下内容扩展前一个调用:
Parse.Object.saveAll(newObjects, {
success: function(messages) {
console.log("The objects were successfully saved...")
},
error: function(error) {
console.log("An error occurred when saving the messages array: %s", error.message)
}
})
我希望这对你有所帮助