我正在尝试编写Parse.com Cloud Code函数来完成以下工作流程:
code
类型的任何对象匹配。code
的对象具有指向item
类型对象的指针。code.item
以查看它是否有指向alert
类型对象的指针。code.item.alert
确实存在,那么我想获取完整的alert
对象,包括可能存在或不存在的指针,最多可达2层。当我开始编写此函数的代码时,我可以让它工作到检查是否存在code
,如果存在,是否也存在code.item.alert
。
这就是出现问题的地方。就目前而言,在我的函数的工作版本中,返回的alert
项只是类类型和objectId。我理解为什么会这样,我正在尝试编写代码来在返回之前填充对象,但是我没有尝试。
这是迄今为止工作的代码(但仅返回alert
对象的shell):
Parse.Cloud.define("alertLookup", function (request, response) {
Parse.Cloud.useMasterKey();
var codeQuery = new Parse.Query("code");
codeQuery.equalTo("value", request.params.code);
codeQuery.include("item");
codeQuery.find().then(function (codes) {
if (codes.length === 0) {
response.success("no item");
} else {
var code = codes[0];
var item = code.get("item");
var alert = item.get("alert");
if (alert === null || alert === undefined) {
response.success("no item");
} else {
response.success(alert);
}
}
}, function (error) {
response.error(error);
});
});
以下是我尝试失败的错误代码为141:
Parse.Cloud.define("alertLookup", function (request, response) {
Parse.Cloud.useMasterKey();
var codeQuery = new Parse.Query("code");
codeQuery.equalTo("value", request.params.code);
codeQuery.include("item");
codeQuery.find().then(function (codes) {
if (codes.length === 0) {
response.success("no item");
} else {
var code = codes[0];
var item = code.get("item");
var alert = item.get("alert");
if (alert === null || alert === undefined) {
response.success("no item");
} else {
return alert.fetch();
}
}
}).then(function (a) {
response.success(a);
}, function (error) {
response.error(error);
});
});
为什么fetch()
来电无法正常工作?当我插入console.log()
语句时,虽然alert
非空,但似乎永远不会调用return alert.fetch();
。至少,response.success(a);
行永远不会被调用。为什么不呢?
答案 0 :(得分:0)
在链接Promise时尝试这个:
codeQuery.find().then(function (codes) {
if (codes.length != 0) {
var code = codes[0];
var item = code.get("item");
var alert = item.get("alert");
if (alert != null && alert != undefined) {
var alertObj = new Parse.Object("alert"); // alert class ???
alertObj.id = alert.id;
return alertObj.fetch();
}
}
// return a Promise for no items
return Parse.Promise.as("no item");
}).then(function (a) {
response.success(a);
}, function (error) {
response.error(error);
});