使用for循环创建具有Parse的子类对象

时间:2016-01-14 23:47:24

标签: javascript parse-platform

我尝试使用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();

谢谢,再见。

2 个答案:

答案 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)
        }
    })

我希望这对你有所帮助