在 Parse Cloud Code 中某个类的 afterSave 中,我设置了适当的 ACL,然后再次保存相同的对象。我在 afterSave 方法中有一个推送通知,但是在 afterSave 中执行 save() 我认为会导致通知被推送两次或三次。
我该如何处理这种情况?有没有办法保存这样 afterSave 不再被调用?想法?非常感谢帮助!谢谢!
在我的云代码中,我想要检索"Messages"类中的第一个对象.然后我想从该对象中获取一些信息,将其发送到另一个类,最后从我最初从中删除它的"Messages"类中删除该对象.下面是我的代码,但它不起作用.我该怎么做这个?
我应该使用与"destroy"方法不同的方法,例如collection.remove吗?
Parse.Cloud.afterSave("sendMessage", function(Parse.Message, response) {
var body = null;
var senderName = null;
var senderId = null;
var randUsers = [];
var query = new.Parse.Query(Parse.Message);
query.find({
success: function(results){
body.push(results[1].get("messageBody"));
senderName.push(results[1].get("senderName"));
senderId.push(results[1].get("senderId"));
results[1].destroy({
success: function(results[1]){
//the first object in the class "Messages" was deleted
}, error: function(results[1], error){
//the first object was not deleted
}
});
response.success(getUsers);
}, error: funtion(error){
response.error("Error");
}
});
});
Run Code Online (Sandbox Code Playgroud)
避免混淆:"getUsers"是一个任意函数调用.
当删除标记时,我正在使用Parse云代码清除指向"Tag"对象的所有指针."beforeDelete"被调用,我没有得到任何错误+控制台打印正确的"歌曲"对象"指向已删除的"标签".
但是指针不会从数组中删除.
Parse.Cloud.beforeDelete("Tag", function(request, response) {
var query = new Parse.Query("Song");
query.equalTo("tags", request.object);
query.include(["tags"]);
query.find({
success: function(songs) {
console.log(songs);
for (var i = 0; i < songs.length; i++) {
songs[i].remove("tags",request.object);
songs[i].save();
};
response.success();
},
error: function(error) {
response.error(error);
}
});
});
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么 ?
谢谢Shani
我在Parse Cloud Code中创建了一个后台作业,它根据我的一个Parse类中的日期发送电子邮件通知.
这是一个想法:查询包含日期的类.迭代返回的每个对象并检查日期字段.如果日期等于今天,请发送电子邮件通知,将日期更改为null并将其保存回Parse.
但是,似乎并非所有对象都保存回Parse.我怀疑这是我的承诺链的问题,但我很难诊断确切的问题或如何解决它.以下是相关代码
Parse.Cloud.job("job", function(request, status) {
// Query for all users
var query = new Parse.Query(className);
query.each(function(object) {
if (condition) {
object.set(key, false);
object.save(null, {
success:function(object){
// This never executes!
},
error: function(error){
}
}).then(function(){
// This never executes
console.log("Save objects successful");
},
function(error){
status.error("Uh oh, something went wrong saving object");
});
// Set hiatus end successful
Mailgun.sendEmail({
});
}
});
});
Run Code Online (Sandbox Code Playgroud)
console.log("Save objects successful");即使订阅对象成功保存到Parse,object.save()promise链中的这一行也不会被执行.
此外,如果查询返回的对象超过5个,则只有前5个成功保存回Parse.不执行任何其他保存,也不会发送电子邮件通知.
我很难理解承诺,我确定我需要使用它们,但我不知道如何和其他答案根本无法帮助我.
我想循环一个数组,查询数组的每个值的所有结果,然后在计算这些结果的平均值之后,在数组中添加平均值.在每次迭代之后,该数组作为响应发送.
这是我的代码,可以帮助我理解这里:
Parse.Cloud.define('getScorePeopleArray', function(request, response) {
var peopleArray = request.params.peoplearray;
var query = new Parse.Query("Scores");
var resultat;
var index, len;
var resultarray = [];
var people;
for (index = 0, len = peopleArray.length; index < len; ++index) {
people = peopleArray[index];
query.equalTo("People",people);
query.find({
success: function(results) {
var sum = 0;
for (var i = 0; i < results.length; ++i) {
sum += results[i].get("Score");
}
resultat = (sum / results.length)*5;
if(!resultat){
resultarray.push("null");
}else{
resultarray.push(resultat);
}
},
error: function() {
response.error("score …Run Code Online (Sandbox Code Playgroud) 我有两个问题:
logbookEntries,然后将其计为我帐户上的两个Parse 请求,因为它是两个 Parse 查询?这是代码:
Parse.Cloud.define("logbookEntries", function(request, response) {
//::: Query 1 :::
var firstQuery = new Parse.Query("Logbook");
var returnData = [];
firstQuery.find().then(function(firstResults) {
returnData[0] = firstResults;
}).then(function(result) {
//::: Query 2 :::
var secondQuery = new Parse.Query("Logbook");
secondQuery.find().then(function(secondResults))
returnData[1] = secondResults;
}).then(function(result) {
response.success(returnData);
}, function(error) {
response.error(error);
});
});
Run Code Online (Sandbox Code Playgroud)
提前致谢。
我需要在保存之前检查原始对象以查看更改的值。目前我有这个:
Parse.Cloud.beforeSave("Stats", function(request, response) {
if (!request.object.isNew()){
var query = new Parse.Query("Stats");
query.get(request.object.id, {
success: function(oldObject) {
alert('OLD:' + oldObject.get("Score") + "new:" + request.object.get("Score"));
/*Do My Stuff Here*/
response.success();
},
error: function(oldObject, error) {
response.error(error.message);
}
});
}else{
response.success();
}
});
Run Code Online (Sandbox Code Playgroud)
问题是它oldObject等于request.object。
警报结果也是:OLD:10 new:10,但真正的旧分数是5。另外根据之前的保存输入日志,原来是真的5。
知道我做错了什么吗?
编辑:这是之前的保存日志。
before_save triggered for Stats as master:
Input: {"original":{"achievements":[],"Score":"100"updatedAt":"2015-11-02T10:09:24.170Z"},"update":{"Score":"110"}}
Result: Update changed to {"Score":"110"}
Run Code Online (Sandbox Code Playgroud)
Edit2:有没有办法获得脏值?
console.log("dirty: "+ request.object.dirty("score"));
I2015-11-03T14:23:12.198Z]dirty: true
Run Code Online (Sandbox Code Playgroud) 我想从我的客户端调用我的cloudcode发出一个http请求.
我正在运行parse-server并尝试创建一个解析云代码函数.我从这个过于简单的例子开始:
Parse.Cloud.define("createContent", function(request, response) {
response.error("not implemented");
});
Run Code Online (Sandbox Code Playgroud)
我可以使用带有curl的REST API调用我的函数并获取带有错误消息的JSON :( {"code":141,"error":"response.error is not a function"}这不是我期望的错误消息).经过进一步检查的response对象竟然是null.
这是日志的相应部分:
error: Failed running cloud function createContent for user undefined with:
Input: {}
Error: {"code":141,"message":"response.error is not a function"} functionName=createContent, code=141, message=response.error is not a function, , user=undefined
error: response.error is not a function code=141, message=response.error is not a function
Run Code Online (Sandbox Code Playgroud) 云代码中的aftersave函数是在每次更新特定类的对象时调用还是仅在创建类的对象后调用?
parse-cloud-code ×10
parse-platform ×10
javascript ×4
promise ×2
backbone.js ×1
http-request ×1