javascript - 解析 CloudCode 的执行顺序

标签 javascript ios iphone parse-platform

每次保存新笔记时,我都会尝试向所有具有读取权限的人发送推送消息。

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

我试过一个一个地运行单独的任务,它工作正常。但是,当我在下面的代码中将所有内容放在一起时,我得到了奇怪的结果。查看日志我可以看到它没有按我预期的顺序执行。我首先虽然 getACL 调用是一个异步调用,所以我尝试在没有运气的情况下实现 promise 。然后在 stackoverflow 的帮助下,我发现 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

一切都完全乱了??

如何按照上面的写法执行上面的函数?

最佳答案

我发现当我运行东西时日志也没有按顺序排列,可能是计时问题或其他问题,当它们在同一秒时忽略顺序,我已经做了其他测试来确认事情确实运行为了我自己的云代码......让我完全困惑了一段时间。

您遇到的问题是日志#3 永远不会被命中...尝试跟踪它自己的ACLinJSON 以查看实际结构。当您将它附加到一个字符串时,它会输出 [object Object],如您所见,console.log(ACLinJSON); 也是如此。

这是我见过的结构:

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

基于此,我希望您的循环能够正常工作,但它可能具有不同级别的包装。

更新:

原来问题是在寻找字符串“true”而不是 bool 值 true,因此解决方法是替换以下行:

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

关于javascript - 解析 CloudCode 的执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25114339/

相关文章:

javascript - 使用 javascript/jQuery 获取 SVG 中 <g> 的内容

javascript - 模糊后 knockout 更新计算值

iPhone我如何让两条连接线跟随到位置?

javascript - Firefox Addon 脚本可信页面内容

ios - 保留读取的推送通知

ios - Parse 中的 UITableView,索引不正确

iphone - MPMoviePlayerController 全屏旋转,而父 View Controller 仅支持纵向

html - Bootstrap Logo 在调整大小时不会缩小

iphone - iOS 应用程序仅在第一次使用该应用程序时发送警报 View

javascript - 使用 Phonegap 在 Android 上收集联系人是否有组属性?