我尝试每次保存新笔记时向每个具有读取权限的人发送推送消息。这是我试过的代码。在我体验一个无法串行化的对象之前,这是因为我正在使用异步调用。经过一番研究后,我偶然发现了javascript的承诺。我之前从未使用过这样的东西,所以我发现很难理解它。
我发现的问题是object.getACL()是异步调用。我先尝试在它之后添加一个.then但是找不到这个返回的方法。现在,我已经尝试将其创建为自己的函数,并在返回后手动创建新的承诺并解决承诺。这也不起作用。我只需要一个接一个顺序调用的函数,就像正常编程lol一样。
在伪代码中它应该获得ACL。评估ACL中的每个成员,并返回具有读访问权限的所有用户的数组。然后向每个成员发送推送通知。任何帮助将不胜感激。
Parse.Cloud.afterSave("Notes", function(request) {
var idsToSend = [];
var i = 0;
console.log("start");
var getACL = function(object) {
var promise = new Parse.Promise();
console.log("enter getACL");
var noteACL = object.getACL() {
promise.resolve(noteACL);
};
return promise;
};
getACL(request.object).then(function(objACL) {
var ACLinJSON = objACL.toJSON();
for (var key in ACLinJSON) {
if (ACLinJSON[key].read == "true") {
idsToSend[i] = key.id;
console.log("i = " + i + " = " + idsToSend[i]);
i++;
}
}
console.log(idsToSend);
//lookup installations
var query = new Parse.Query(Parse.Installation);
query.containedIn('user', idsToSend);
Parse.Push.send({
where: query,
data: {
alert: "note updated"
}
}, {
success: function() {
console.log("Success sent push");
},
error: function(error) {
console.error("can’t find user"); //error
}
});
});
});
答案 0 :(得分:0)
ParseObject.getACL()
不是异步调用,它会返回Parse.ACL
而不是Parse.Promise
,为什么要使用此承诺呢?您不必要地使代码复杂化。
删除Promises,只需获取ACL并循环访问JSON,如果仍有问题,请发布一个新问题,然后解决您遇到的问题。