find的结果在我的云函数中是未定义的
The results of Parse.Query.find is undefined in my cloud function
我是一个新手,刚刚开始在我的休闲手机游戏中使用Parse。
我正在写一个云代码,客户端可以请求购买甲板。因为代码对于解释我的问题很重要,所以我把我的问题移到了代码下面。
我有以下类:
1. User :
coin(Number)
2. Deck :
priceCoin(Number)
nickname(String)
3. User_Deck :
userId(Pointer to User)
deckId(Pointer to Deck)
类和客户端的数据请求:
- 用户和甲板类各有一行,用户请求购买甲板。
- 发送给云函数的参数是deck,是deck的objectId。
这是云函数:
Parse.Cloud.define("req_purchase_deck", function(request, response) {
var purchaseDeck;
var deckQuery = new Parse.Query("Deck");
deckQuery.get( request.params.deck, function(result) {
purchaseDeck = result; // Q2 : is this valid in the scope of this function?
var userHasQuery = new Parse.Query("User_Deck");
userHasQuery.equalTo("userId", request.user);
userHasQuery.equalTo("deckId", result);
return userHasQuery.find();
}).then( function( results ) { // Q1 : Why results undefined?
if( results == null || results.length == 0 ) {
var userCoin = request.user.get("coin");
var priceCoin = purchaseDeck.get("priceCoin");
if( userCoin >= priceCoin ) {
console.log("/purchase made/" + userCoin + " - " + priceCoin + " = " + userCoin - priceCoin);
request.user.set("coin", userCoin - priceCoin);
return request.user.save();
}
else {
return Parse.Promise.error("not enough coins");
}
}
else {
return Parse.Promise.error("already has deck");
}
}).then( function(result) {
var newUserDeckObject = new Parse.Object("User_Deck");
newUserDeckObject.set("userId", request.user);
newUserDeckObject.set("deckId", purchaseDeck);
console.log("/purchase deck added");
return newUserDeckObject.save();
}).then( function(result) {
var returns = {};
returns["userCoins"] = request.user.get("coin");
returns["purchasedDeck"] = purchaseDeck.get("nickname");
response.success(returns);
console.log(request.user.username + "/purchase deck succeeded--/");
}, function(error) {
response.error(error);
});
});
结果:已经有甲板//即使没有行在User_Deck类。我发现"结果"是未定义的。
问题1:deckQuery做得很好,但userDeckQuery结果未定义的结果:我的代码有什么问题?为了找出原因,我做了很多记录,但这是我唯一找到的东西。
问题2:我正在缓存deckQuery结果到purchaseDeck,对象是否有效,直到这个云函数结束?
提前感谢!
我知道为什么了。
我使用回调样式返回我的查询,并期望得到承诺样式的结果。我用注释标记了
Parse.Cloud.define("req_purchase_deck", function(request, response) {
var purchaseDeck;
var deckQuery = new Parse.Query("Deck");
//deckQuery.get( request.params.deck, function(result) {
deckQuery.get( request.params.deck ).then( function(result) { // Q1 solved.
purchaseDeck = result; // Q2 : @Fosco answered that it's fine.
var userHasQuery = new Parse.Query("User_Deck");
userHasQuery.equalTo("userId", request.user);
userHasQuery.equalTo("deckId", result);
return userHasQuery.find();
}).then( function( results ) {
if( /*results == null ||*/results.length == 0 ) { // results never be null
var userCoin = request.user.get("coin");
var priceCoin = purchaseDeck.get("priceCoin");
if( userCoin >= priceCoin ) {
console.log("/purchase made/" + userCoin + " - " + priceCoin + " = " + userCoin - priceCoin);
request.user.set("coin", userCoin - priceCoin);
return request.user.save();
}
else {
return Parse.Promise.error("not enough coins");
}
}
else {
return Parse.Promise.error("already has deck");
}
}).then( function(result) {
var newUserDeckObject = new Parse.Object("User_Deck");
newUserDeckObject.set("userId", request.user);
newUserDeckObject.set("deckId", purchaseDeck);
console.log("/purchase deck added");
return newUserDeckObject.save();
}).then( function(result) {
var returns = {};
returns["userCoins"] = request.user.get("coin");
returns["purchasedDeck"] = purchaseDeck.get("nickname");
response.success(returns);
console.log(request.user.username + "/purchase deck succeeded--/");
}, function(error) {
response.error(error);
});
});
现在的结果是"not enough coin"
相关文章:
- Jquery未定义函数正在停止其他操作
- 在不破坏未定义函数的情况下,对多个视图使用单个js文件
- Uncaught ReferenceError:尝试在Android网络视图中访问时未定义函数
- jQuery文件上传和验证未定义函数
- 引用错误:未定义函数-Firefox
- res.render中出错,未定义函数
- 神秘的未定义函数
- 尝试使用函数和Ajax修改值时未定义函数
- 引用错误:未定义函数
- ReferenceError:未定义函数
- 在 Angular JS 中使用 ng-include 的未定义函数
- 未捕获的引用错误:未定义函数
- j查询工具提示引发错误:未定义函数
- 未捕获的引用错误: 未定义单击世界 -- 未定义函数
- JS:引用错误:未定义函数
- 茉莉花未定义函数
- Javascript 错误:未捕获的引用错误:未定义 [函数]
- 未定义函数
- 尽管 js 文件引用在标头中,但未定义函数
- Javascript 未定义函数错误