Разобрать передСохранить не вызывая

Я сохраняю объект с именем "Post", и у меня есть поле с именем "author", которое является указателем на класс Parse.User. Когда я создаю новый объект 'Post', я передаю значение 'author' в качестве значения Parse.User.id моей функции Cloud Code. Очевидно, что это приведет к ошибке типа в поле "author", так как это строка и она ищет объект Parse.User.

Поэтому, чтобы избежать этого, я установил триггер beforeSave, который проверял бы значение 'author', и, если бы он имел тип string, запрашивал класс Parse.User для идентификатора пользователя и устанавливал значение author как возвращаемое Promise.

НО.. мой триггер beforeSave, похоже, не вызывается по каким-либо причинам. Кто-нибудь знает, почему это может происходить? Первоначально я думал, что моя облачная функция исчерпала время, но моя функция завершается и выдает ошибку типа, которую я ожидал, так как я передаю строку в поле Pointer.

Вот мой код:

Parse.Cloud.beforeSave('Post', function (request, response) {
    var author = request.object.get('author');

    if (typeof author == 'string') {
        var qry = Parse.Query(Parse.User);
            qry.get(author, {
                success: function (user) {
                    request.object.set('author', user);
                    response.success();
                },
                error: function (u, err) {
                    response.error(err.message);
                }
            });

    } else {
        response.success();
    }
});

Parse.Cloud.define("post_update", function(request, response) {
    var vals = request.params;

    /**
     * Update if vals.objectId is set otherwise error
     */
    if (typeof vals['objectId'] != 'undefined' && typeof vals['objectId'] != 'null') {
        var qry = new Parse.Query('Post');
            qry.get(vals.objectId, {
               success: function (obj) {
                    delete vals.objectId;

                    obj.save(vals, {
                        success: function (nobj) {
                            response.success({redirect: false, object: nobj.id});
                        },
                        error: function (nobj, err) {
                            response.error(err.message);
                        }
                    });
               },
               error: function (obj, err) {
                    response.error(err.message + ': ' + vals.objectId);
               }
            });
    } else {
        response.error('Unable to update post');
    }
});

Вот моя работа:

Parse.Cloud.define("post_update", function(request, response) {
    var vals = request.params;

    var onSave = {
        success: function (nobj) {
            response.success({redirect: false, object: nobj.id});
        },
        error: function (nobj, err) {
            response.error(err.message);
        }
    };

    /**
     * Update if vals.objectId is set otherwise error
     */
    if (typeof vals['objectId'] != 'undefined' && typeof vals['objectId'] != 'null') {
        var qry = new Parse.Query('Post');
            qry.get(vals.objectId, {
               success: function (obj) {
                    delete vals.objectId;

                    if (typeof vals['author'] === 'string') {
                        var uqry = new Parse.Query(Parse.User);
                            uqry.get(vals.author, {
                                success: function (u) {
                                    vals.author = u;
                                    obj.save(vals, onSave);
                                },
                                error: function (u, err) {
                                    vals.author = null;
                                    obj.save(vals, onSave);
                                }
                            });
                    } else {
                        vals.author = null;
                        obj.save(vals, onSave);
                    }
               },
               error: function (obj, err) {
                    response.error(err.message + ': ' + vals.objectId);
               }
            });
    } else {
        response.error('Unable to update post');
    }
});

0 ответов

Другие вопросы по тегам