解析内置函数的Javascript承诺

时间:2014-08-02 12:01:33

标签: javascript ios asynchronous parse-platform promise

我尝试每次保存新笔记时向每个具有读取权限的人发送推送消息。这是我试过的代码。在我体验一个无法串行化的对象之前,这是因为我正在使用异步调用。经过一番研究后,我偶然发现了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
            }
        });
    });

});

1 个答案:

答案 0 :(得分:0)

ParseObject.getACL() 是异步调用,它会返回Parse.ACL而不是Parse.Promise,为什么要使用此承诺呢?您不必要地使代码复杂化。

删除Promises,只需获取ACL并循环访问JSON,如果仍有问题,请发布一个新问题,然后解决您遇到的问题。