为什么Parse Cloud Code中的Promise不起作用?

时间:2016-06-23 16:30:23

标签: javascript parse-platform promise cloud-code

Parse Server上的以下Cloud Code功能无法按预期工作。

似乎太早解决,以至于并非promise2的所有链式承诺都被执行。特别是我看到一些resultA.add(...);没有被执行。

我试图重复安排这几次但没有成功。

我不确定return Parse.Promise.resolve();是否应该在else条款中返回,或者是否是其他内容或

有人能在这里发现什么吗?

Parse.Cloud.define("aFunction", function(request, response) {

    var q = new Parse.Query("ClassA");    
    q.find()
    .then(
        function(resultsA) {

            var promise = new Parse.Promise.as();
            resultsA.forEach(function(resultA) {

                promise = promise
                .then(
                    function() {
                        var q = new Parse.Query("ClassB");
                        return q.first();
                    }
                )
                .then(
                    function(resultB) {

                        if (resultB != undefined) {
                            resultA.set(...);
                            return resultA.save();

                        } else {
                            resultA.set(...);
                            return resultA.save();
                        }
                    }
                )
                .then(
                    function() {

                        var q = new Parse.Query("ClassC");
                        return q.find()

                        .then(
                            function(resultsC) {
                                if (resultsC != undefined && resultsC.length > 0) {

                                    var promise2 = new Parse.Promise.as();
                                    resultsC.forEach(function(resultC) {
                                        promise2 = promise2
                                        .then(
                                            function() {
                                                resultA.add(...);
                                                return resultA.save();
                                            }
                                        );
                                    });
                                    return promise2;

                                } else {
                                    return Parse.Promise.resolve();
                                } 
                            }
                        );
                    }
                );
            });
            return promise;
        }
    )
    .then(
        function(result) {
            response.success("success");
        },
        function(error) {
            response.error(error.message);
        }
    );
});

长代码,但我已将其剥离并希望显示实际结构。感谢。

1 个答案:

答案 0 :(得分:0)

刚查过你的代码。 当你为显示结构“清理代码”时,我不确定这是你的类型错误。

循环中的

:chats.forEach(function(resultA)..

好像你还没有声明'聊天'变量。

另外,正如Parse官方推荐的那样,请尝试以下方法:

var _ = require('underscore.js');

var promise = Parse.Promise.as();
_.each(resultsA, function(resultA) {

    promise = promise.then(function() {..}.then..then..
}
return promise;

希望这可以帮到你。