解析之前保存()云代码函数不起作用
Parse beforeSave() cloud code function not working
我添加了一个 beforeSave() 解析云函数,该函数定义无法正常工作。
这是背景:我有一个名为UserRewards的类,它有一个名为ParseRelation类型的user的列。它正好由 1 个关系组成,该关系具有 ParseUser 类型的单个对象。我想在此功能中设置一个新的列 pUser。它查找用户关系,在其中找到 ParseUser,并将 pUser 设置为该用户。
这是我的代码
Parse.Cloud.beforeSave("UserRewards", function(request, response) {
var relation = request.object.relation("user");
relation.query().find({
success: function(list) {
console.log("looked up relation");
if (list.length > 0) {
var pUser = list[0];
request.object.set("pUser", pUser);
console.log("updated pUser");
}
},
error: function(error) {
console.error("unable to lookup relation");
}
});
response.success();
});
当我更新用户奖励行时,正在调用此函数。但它什么都不做 - 没有任何控制台或错误日志。
有什么想法吗?
您的函数在查询完成之前运行 response.success(),从而取消它。 尝试。。。
Parse.Cloud.beforeSave("UserRewards", function(request, response) {
var relation = request.object.relation("user");
relation.query().find({
success: function(list) {
console.log("looked up relation");
if (list.length > 0) {
var pUser = list[0];
request.object.set("pUser", pUser);
console.log("updated pUser");
}
response.success();
},
error: function(error) {
console.error("unable to lookup relation");
response.error(error);
}
});
});
或者,更容易用承诺来看待...
Parse.Cloud.beforeSave("UserRewards", function(request, response) {
var relation = request.object.relation("user");
relation.query().find().then(function(list) {
console.log("looked up relation");
if (list.length > 0) {
var pUser = list[0];
request.object.set("pUser", pUser);
console.log("updated pUser");
}
response.success();
}, function(error) {
console.error("unable to lookup relation");
response.error(error);
});
});
编辑我想我将后续问题理解为要求将指针属性与关系属性同步,假设在保存之前只设置了其中一个。 这可以通过检测关系是否为空来完成。 如果是,请再执行一个异步步骤来获取指针...
Parse.Cloud.beforeSave("UserRewards", function(request, response) {
var relation = request.object.relation("user");
relation.query().find().then(function(list) {
console.log("looked up relation");
if (list.length > 0) {
var pUser = list[0];
request.object.set("pUser", pUser);
console.log("updated pUser");
return Parse.Promise.as(); // we're done, this will pass nothing to the next step
} else { // the relation is empty, so the user pointer must be set
var pointer = request.object.get("pUser");
return pointer.fetch(); // this will pass the pUser to the next step
}
}).then(function(pUser) {
if (pUser) {
// must have found an empty relation in the last step. add the user pointer to it
request.object.relation.add(pUser);
}
response.success();
}, function(error) {
console.error("unable to lookup relation");
response.error(error);
});
});
(请注意,代码未经测试)。
相关文章:
- 如何将函数包装在函数中以避免代码重复
- 从var向代码隐藏函数传递值
- Angularjs代码未在匿名函数中运行
- 输入字段验证的键代码函数在chrome中没有按预期工作
- 将两个云代码函数合并为一个函数
- 这个JavaScript代码(函数)有什么问题
- 解析之前保存()云代码函数不起作用
- 是否可以从云中调用 Parse 定义的云代码函数
- chrome、firefox、ie11中的基本html代码函数,但不是ie9
- 未定义从php代码函数调用javascript函数
- 云代码函数运行两次
- 反转jQuery代码函数
- Javascript代码——函数ToppingsWanted()有什么问题?
- 在javascript中反映本机代码函数参数
- 如何使用Javascript SDK调用带有参数的云代码函数
- 从一个云代码函数返回多个值
- 在AngularJs中使用遗留代码函数
- Javascript代码函数解释
- JavaScript和Cloud代码函数,共享相同的var
- 解析从另一个云代码函数中调用云代码函数的Javascript