以下是我的云代码功能:
Parse.Cloud.define("usePromotionCode", function (request, response) {
Parse.Cloud.useMasterKey();
var promotionCode = request.params.promotionCode;
if (promotionCode == null) {
response.error("Promotion code must be specified!");
} else {
var promotionCodeQuery = new Parse.Query("Invite");
promotionCodeQuery.equalTo("promotionCode", promotionCode);
promotionCodeQuery.equalTo("used", false);
promotionCodeQuery.first().then(
function (invite) {
if (invite !== undefined) {
console.log("Successfully found the invite. Promoting the user");
response.success("true");
} else {
console.error("Found invite but it is undefined");
response.error("Invalid promotion code");
}
},
function (error) {
response.error("Invalid promotion code: " + error);
}
);
}
});
这是日志的适当部分:
E2015-07-09T10:07:13.617Z]v142 Ran cloud function usePromotionCode for user fYHD27Er76 with:
Input: {"promotionCode":"ThHuf1rhqmfSmfi"}
Result: Invalid promotion code
I2015-07-09T10:07:13.785Z]Found invite but it is undefined
查询承诺似乎通过成功响应解析。但是,从日志中看到它传递的invite
变量为null。有趣的是,我可以确认该对象确实存在于具有该促销代码的服务器上并且使用= false
此问题类似于另一个stackoverflow question,除了我的代码使用promises并且仍然存在问题,并且是云代码函数,而不仅仅是javascript函数。
查询是否需要成功解析promise并仍然传递null / undefined对象?如果没有,我做错了什么?
请注意,我将first()
替换为count()
,并且使用(非空)值1传递的计数成功解析了promise。这再次确认服务器上存在该对象!
我还尝试了success:
,error:
回调方法而不是Javascript承诺,但它也没有用。