Parse Query没有注册类名

时间:2013-08-05 07:30:20

标签: javascript parse-platform

我在通过Cloud Code中的javascript SDK查询Parse时遇到了麻烦。我有一个名为“Stack”和“StackUser”的类。一切正常,直到我查询“堆栈”。我使用与查询“StackUser”完全相同的语法。我使用get方法获取带有id的堆栈对象。我已通过登录控制台确认stackpointer.id确实是正确的ID。

但是,此功能永远不会进入queryStack.get(stackPointer.id {行。我已经确认对象stackPointer具有正确的信息,stackPointer.id也是如此。我还确认控制流进入for循环。但是它没有进入上面提到的那一行。

请帮帮我。我究竟做错了什么? 谢谢!

Parse.Cloud.define("getStacksForUser", function(request, response) {

    console.log(request);
    console.log(response);

    var StackUser = Parse.Object.extend("StackUser");
    var queryStackUser = new Parse.Query(StackUser);

    queryStackUser.equalTo("user", request.user);
    console.log("BEFORE FIND")

    queryStackUser.find({
        success: function(results) {
            console.log("DO WE HAVE RESULTS");
            console.log(results);
            var Stack = Parse.Object.extend("Stack");
            var queryStack = new Parse.Query(Stack);

            console.log("BEFORE LOOP");
            var stackarray = new Array();
            for (var i = 0; i < results.length; ++i) {
                var stackPointer = results[i].get("stack");
                queryStack.get(stackPointer.id, {
                    success: function(stack) {
                        console.log("STACK")
                        console.log(stack);
                        stackarray.push(stack);
                    },
                    error: function(object, error) {
                        console.log("ERROR!!!");
                        response.error("retrieving a stack failed");
                    }
                });

            }
            console.log("RESULT TIME");
            console.log(stackarray);
            response.success(stackarray);
        },
        error: function() {
            response.error("retrieving stacks failed");
        }
    });
});

2 个答案:

答案 0 :(得分:1)

调用response.success()将返回对客户端的响应。你在一个使用多个异步get()方法的循环之外调用它,所以毫无疑问这些get()查询没有机会运行。

答案 1 :(得分:1)

如果你使用承诺,我认为你会更开心。下面的代码刚刚进行了视觉检查,但我相信它接近你想要的。我实际上还没有使用过。当时我可能会对此感到困惑。内部错误也可能传播到最后一个错误子句。

-Bob

Parse.Cloud.define("getStacksForUser", function(request, response) {

    console.log(request);
    console.log(response);

    var StackUser = Parse.Object.extend("StackUser");
    var queryStackUser = new Parse.Query(StackUser);

    queryStackUser.equalTo("user", request.user);
    console.log("BEFORE FIND")
    var stackarray = new Array();

    var promise0 = queryStackUser.find();
    promise1 = promise0.then(function(results){
        console.log("DO WE HAVE RESULTS");
        console.log(results);
        var Stack = Parse.Object.extend("Stack");
        var queryStack = new Parse.Query(Stack);

        console.log("BEFORE LOOP");
        var promiseArray = new Array();
        for (var i = 0; i < results.length; ++i) {
            promiseArray[i] = results[i].get("stack");
            promiseArray[i].then(function(result){
                console.log("STACK")
                console.log(stack);
                stackarray.push(stack);
            }, function(error){
                console.log("ERROR!!!");
                response.error("retrieving a stack failed");
            });
        };
        return Parse.Promise.when(promiseArray);
    });
    promise1.then(function(result){
        response.success();
    }, function(error){
        response.error(error);
    });
});