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