云代码中的查询问题

时间:2015-05-20 16:01:28

标签: javascript php parse-platform

为什么这不起作用的任何想法?它带有成功消息,但实际上并没有更新任何内容。

我正在使用Parse添加一个FB用户,但由于它没有func来添加用户名和电子邮件尝试这样做。任何帮助非常感谢。

JS

Parse.Cloud.run("test", { objectId: "Q8XRUcL22N", name: "Rich", email: "rich@gmail.com"}, {
    success: function(results) {
        console.log(results);
    },
    error: function(error) {
        console.log(error);
    }
});

云代码:

Parse.Cloud.define("test", function (request, response) {
    Parse.Cloud.useMasterKey();

    var uid;
    var query = new Parse.Query("_User");

    query.count({
        success: function (results) {
            uid = parseInt(results);

        },
        error: function () {
            response.error("UID lookup failed");
        }
    });

    var query = new Parse.Query(Parse.User);

    query.equalTo("objectId", request.params.objectId);

    query.first({
        success: function (object) {

            object.set("username", request.params.name);
            object.set("email", request.params.email);
            object.set("uid", uid);
            var acl = new Parse.ACL();
            acl.setPublicWriteAccess(false);
            acl.setPublicReadAccess(false);
            object.setACL(acl);
            object.save();
            response.success("Success Message");
        },
        error: function (error) {
            response.error("Error Message");
        }
    });
});

由于

1 个答案:

答案 0 :(得分:0)

在响应中调用success()error()会暂停当时正在进行的操作,包括用户的save()

此外,您似乎希望在设置ACL时在用户中记录用户数。获取计数也必须与其他操作序列化。 (另外,请注意,只要用户数永远不会下降,count只能作为id“uid”。解析对象的id作为id有什么问题?)。

大多数解析函数都返回promises,使用它们是尝试嵌套回调的唯一方法。所以......

Parse.Cloud.define("test", function(request, response) {
    Parse.Cloud.useMasterKey();
    var uid;
    var query = new Parse.Query(Parse.User);
    query.count().then(function(count) {
        uid = count;
        return query.get(request.params.objectId);
    }).then(function(object) {
        object.set("username", request.params.name);
        object.set("email", request.params.email);
        object.set("uid", uid);
        var acl = new Parse.ACL();
        acl.setPublicWriteAccess(false);
        acl.setPublicReadAccess(false);
        object.setACL(acl);
        return object.save();
    }).then(function (object) {
        response.success(object);
    },function(error) {
        response.error("Error Message");
    });
});