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

promise を使用すると、より幸せになると思います。以下のコードは視覚的にチェックしただけですが、あなたが望むものに近いと思います。私は実際に .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 に答える