Android 使用解析云插入镜像对象

Android 使用解析云插入镜像对象,android,parse-platform,nosql,Android,Parse Platform,Nosql,我有一个场景,在这个场景中,我需要复制一个对象(保存到解析之前或之后),只更改一个字段。 问题是,在保存这个新对象和一次又一次调用afterSave回调时,我不知道如何找到停止条件。 我的目标: { "createdAt": "2015-02-21T23:25:03.525Z", "creator": { "__type": "Pointer", "className": "_User", "

我有一个场景,在这个场景中,我需要复制一个对象(保存到解析之前或之后),只更改一个字段。 问题是,在保存这个新对象和一次又一次调用afterSave回调时,我不知道如何找到停止条件。 我的目标:

{
        "createdAt": "2015-02-21T23:25:03.525Z",
        "creator": {
            "__type": "Pointer",
            "className": "_User",
            "objectId": "2k9OzzBrPr"
        },
        "date": {
            "__type": "Date",
            "iso": "2015-02-21T22:46:39.048Z"
        },
        "description": "Hdheha",
        "from": {
            "__type": "Pointer",
            "className": "_User",
            "objectId": "Sd9B1XyZVL"
        },
        "has_accepted": false,
        "has_answered": false,
        "objectId": "YQCWRo0j2V",
        "status": 0,
        "to": {
            "__type": "Pointer",
            "className": "_User",
            "objectId": "2k9OzzBrPr"
        },
        "updatedAt": "2015-02-21T23:25:03.525Z",
        "value": 2.3499999046325684
    }
我的(试用)服务器代码:

function saveMirrorDebit(request) {
    var toUser = request.object.get("to");
    var fromUser = request.object.get("from");
    var invertedDebit = request.object;

    var Debit = Parse.Object.extend("Debit");
    var query = new Parse.Query(Debit);
    query.equalTo("parent_debit", {
        __type : "Pointer",
        className : "Debit",
        objectId : invertedDebit.id
    });

    query.find({
        success : function (debit) {
            if (debit) {
                console.log('debito nao nulo');
            } else {
                console.log('debito nulo, criando o espelho invertido');

                var newDebit = new Debit();

                newDebit.set("creator", invertedDebit.get("creator"));
                newDebit.set("from", toUser);
                newDebit.set("to", fromUser);
                newDebit.set("value", -invertedDebit.get("value"));
                newDebit.set("parent_debit", {
                    __type : "Pointer",
                    className : "Debit",
                    objectId : invertedDebit.id
                });

                newDebit.save(null);
            }
        },
        error : function (error) {
            console.log(error);
        }
    });
}
在afterSave上称为:

Parse.Cloud.afterSave("Debit", function (request) {
...
saveMirrorDebit(request);
...
}
我怎样才能做到这一点


谢谢

首先,我不建议您复制任何对象。。。你想达到什么目标

无论如何,在一个
afterSave
中,你可以实现你想要的。请注意,
beforeSave
可以为您保存一个API调用

Parse.Cloud.afterSave("Debit", function (request) {

    var debit = request.object;
    if (!(debit.has("duplicated"))){
        var Debit = Parse.Object.extend("Debit");
        var duplicated_debit = new Debit();
        duplicated_debit.set("creator", debit.get("creator"));
        duplicated_debit.set("date", debit.get("date"));
        duplicated_debit.set("from", debit.get("from"));
        // repeat as many times as needed, include your "change logic here"

        // that's where the magic happens
        duplicated_debit.set("duplicated",true);
        debit.set("duplicated",true);
        Parse.Object.saveAll([duplicated_debit,debit]);
    }
}

您正在调用
response.success()
还是
response.error()
?如果您不这样做,云函数往往会出现错误行为。谢谢您的提问,现在我正在调用这两个响应(在各自的位置,编辑的代码),但我仍在努力解决逻辑问题…在保存对象时afterSave是否仍在重复运行?是的,确实如此。我正在试图找出停止条件,所以,您建议我在保存前使用?结果会是怎样的?为了澄清这一点,我需要复制以执行更简单、更快的查询。谢谢,我不确定我是否理解,如果数据重复,您的查询会变得更容易。。你能描述一下吗?我认为你不需要在储蓄之前。如果您因此达到API限制而遇到重大问题,则可以轻松地将代码改编为beforeSavehook@LeonardoFerrari,我已经简化了代码,因为您正在使用afterSave。请尝试更新的代码,并让我知道如果你遇到任何问题,工作!非常感谢,它解决了我的问题!我会尽快给你奖金;)