在内置函数上解析 Javascript 承诺

Posted

技术标签:

【中文标题】在内置函数上解析 Javascript 承诺【英文标题】:Parse Javascript promises on builtin functions 【发布时间】:2014-08-02 12:01:32 【问题描述】:

每次保存新笔记时,我都会尝试向具有读取权限的每个人发送推送消息。这是我一直在试用的代码。在我遇到无法序列化对象之前,这是因为我使用的是异步调用。在做了更多的研究之后,我偶然发现了 javascript 的承诺。我以前从来没有用过这样的东西,所以我很难理解它。

我发现的问题是 object.getACL() 是一个异步调用。我首先尝试在它之后添加一个 .then ,但是找不到这个返回的方法。现在我尝试将它创建为自己的函数并手动做出新的承诺并在它返回后解决承诺。这也行不通。我只需要一个又一个顺序调用的函数,就像正常的编程一样,哈哈。

在伪代码中它应该获得 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
            
        );
    );

);

【问题讨论】:

这行好像有问题var noteACL = object.getACL() 是的,那是我的最后一次实验。我确实将它作为 after save 功能之外的单独功能,但这也不起作用。如何让 object.getACL() 返回后触发 对不起,我实际上并不熟悉 parse.com api,我只是觉得在函数调用后有一个 很奇怪。你也有这个if (ACLinJSON[key].read = "true")应该是=====。您可能应该通过jshint.com 运行您的代码并修复错误。 干杯我将从现在开始使用它。我不太关心内部代码,我真的想在 object.getACL() 返回后让所有内容按顺序执行。我不知道承诺背后的概念。网上的例子都试过了,看不懂 【参考方案1】:

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

删除 Promise,只需获取 ACL 并循环遍历 JSON,如果您仍然有问题,请发布一个新问题,其中包含您当时遇到的问题。

【讨论】:

谢谢 我试过了,我不知道为什么它没有按顺序执行。我发布了一个新问题。 link 任何帮助将不胜感激

以上是关于在内置函数上解析 Javascript 承诺的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript知识点总结

Python函数-1

作用域,预解析,对象,内置方法 Math Date Array

使用 mocha 的内置承诺支持测试失败的承诺 [重复]

JavaScript基础:BOM的常见内置方法和内置对象

内置函数和匿名函数