parsing执行的CloudCode顺序

我试图发送推送消息给每个有读取权限的人每次保存一个新的笔记。

伪代码应该得到ACL。 评估ACL中的每个成员,并返回具有读访问权限的所有用户的数组。 然后发送推送通知给每个成员。

我已经尝试了一个一个地运行单独的任务,它正常工作。 但是,当我把下面的代码放在一起,我得到了奇怪的结果。 看着日志,我可以看到它不按照我所期望的顺序执行。 我首先虽然getACL调用是一个asynchronous调用,所以我试图实现承诺没有运气。 然后,从stackoverflow的帮助后,我发现getACL不是asynchronous的,因此代码应该只是工作,对不对?

这就是我想要的:

Parse.Cloud.afterSave("Notes", function(request) { var idsToSend = []; var i = 0; console.log("1 start"); var objACL = request.object.getACL(); var ACLinJSON = objACL.toJSON(); console.log("2 ACL = " + ACLinJSON); for (var key in ACLinJSON) { if (ACLinJSON[key].read == "true") { idsToSend[i] = key.id; console.log("3 i = " + i + " = " + idsToSend[i]); i++; } } console.log("4 idsToSend = " + 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 } }); }); 

这是我从parsing日志中看到的响应

 I2014-08-04T08:08:06.708Z]4 idsToSend = I2014-08-04T08:08:06.712Z]2 ACL = [object Object] I2014-08-04T08:08:06.714Z]1 start I2014-08-04T08:08:06.764Z]Success sent push 

一切都完全没有秩序?

我怎样才能执行上面的函数写的方式?

我发现日志也不是按顺序运行,可能是计时问题或什么的,当他们在同一秒钟时忽略顺序,我做了其他testing,以确认事情真的按顺序运行我自己的云代码…让我完全糊涂了一会儿。

你遇到的问题是,日志#3永远不会被击中…尝试跟踪ACLinJSON自己去看看实际的结构。 当你把它附加到一个string时,它会输出[object Object] ,所以你可以使用console.log(ACLinJSON); 代替。

这是我见过的结构:

 { "*":{"read":true}, "Administrator":{"write":true} } 

基于这一点,我期望你的循环工作,但它可能有不同程度的包装。

更新:

原来的问题是寻找string“真”而不是一个布尔真正的,因此修复是取代下面的行:

 // replace this: if (ACLinJSON[key].read == "true") { if (ACLinJSON[key].read == true) {