解析 CloudCode 的执行顺序
Posted
技术标签:
【中文标题】解析 CloudCode 的执行顺序【英文标题】:Parse CloudCode order of execution 【发布时间】:2014-08-04 08:17:15 【问题描述】:每次保存新笔记时,我都会尝试向具有读取权限的每个人发送推送消息。
在伪代码中它应该获得 ACL。评估 ACL 中的每个成员并返回具有读取访问权限的所有用户的数组。然后向每个成员发送推送通知。
我试过一个一个地运行单独的任务,它工作正常。但是,当我将所有内容放在以下代码中时,我得到了奇怪的结果。查看日志,我可以看到它没有按我预期的顺序执行。我首先虽然 getACL 调用是一个异步调用,所以我尝试实现承诺但没有运气。然后在 *** 的帮助下,我发现 getACL 不是异步的,因此代码应该可以正常工作,对吧?
这就是我正在尝试的:
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
);
);
这是我从解析日志中看到的响应
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
一切都完全不正常了??
如何按照上面写的方式执行上面的函数?
【问题讨论】:
【参考方案1】:我发现当我运行时日志也没有按顺序排列,可能是时间问题或其他问题,当它们在同一秒时忽略顺序,我已经做了其他测试以确认事情确实运行为了在我自己的云代码上……让我完全困惑了一段时间。
您遇到的问题是日志 #3 永远不会被命中...尝试自行跟踪 ACLinJSON
以查看实际结构。当你将它附加到一个字符串时,它会输出[object Object]
,正如你所见,console.log(ACLinJSON);
也是如此。
这是我看到的结构:
"*":"read":true,
"Administrator":"write":true
基于此,我希望您的循环能够正常工作,但它可能具有不同的包装级别。
更新:
原来问题是寻找字符串“true”而不是布尔值 true,因此解决方法是替换以下行:
// replace this: if (ACLinJSON[key].read == "true")
if (ACLinJSON[key].read == true)
【讨论】:
感谢您的帮助!我无法克服不按顺序输入的日志,但是在你说这就是我的问题之后,我发现在我的 if 语句中我应该只使用单 = 符号。这是javascript的东西吗? 使用单个=
将执行分配并返回分配的值(这将评估为“真实”的答案)。当你想比较值时,一定要继续使用==
!
这就是我的想法,但是在查看输出并目视检查它确实是真的之后,双 = 不起作用。你能在字符串上做这样的直接比较吗?
是的,你可以。尝试在 if
语句之前添加 console.log(ACLinJSON[key]);
并查看字符串值是什么,也许还要记录 ACLinJSON[key].read
的值,尝试调试时记录越多越好!
好的排序了。我认为在查看 JSON 结构时,一切都是字符串。但是我发现这不是真的,所以删除引号对我的问题进行了排序。感谢您的所有帮助以上是关于解析 CloudCode 的执行顺序的主要内容,如果未能解决你的问题,请参考以下文章