2013-08-05 100 views
0

我在通過Cloud Code中的JavaScript SDK查詢解析時遇到問題。我有一個名爲「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"); 
     } 
    }); 
}); 

回答

1

調用response.success()將向客戶端返回響應。您在使用多個異步方法的循環之外調用此方法,因此這些get()查詢沒有機會運行也就不足爲奇了。

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); 
    }); 
});