0

我在通过 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");
        }
    });
});
4

2 回答 2

1

调用response.success()将向客户端返回响应。您在使用多个异步方法的循环之外调用它,因此这些查询没有机会运行get()也就不足为奇了。get()

于 2013-08-05T17:55:48.243 回答
1

我认为如果您使用承诺,您会更快乐。下面的代码刚刚经过目视检查,但我相信它接近你想要的。我实际上还没有使用 .when ,所以我可能对此感到困惑。内部错误也应该传播到最后一个错误子句。

-鲍勃

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);
    });
});
于 2013-08-06T15:54:56.473 回答