没有从Cloud Code Parse获得结果

时间:2015-10-21 08:25:28

标签: javascript parse-platform promise cloud-code

我一直在努力解决这个问题很长一段时间,我觉得我现在有点放弃并来这里问。我有一个云代码功能,首先让我得到一个类别列表。每个类别都有多个产品。这种一对多关系是使用指针进行的,其中每个产品都指向它所属的类别。但是我没有找回任何产品。

这是我的代码,

Parse.Cloud.define("GetCategories", function(request, response) {
    var _ = require('underscore.js')
    var MSTCATEGORY_CLASS = "MSTCategory";
    var MSTPRODUCT_CLASS = "MSTProduct";
    var CATEGORY_TAG = "Category";
    var SHOP_TAG = "Shop";
    var VIEWS_TAG = "Views";

    var CAT_LIMIT = 10;
    var PROD_LIMIT = 5;

    var productList = [];
    var CatAndProd = [];

    var MSTCategory = Parse.Object.extend(MSTCATEGORY_CLASS);
    var query = new Parse.Query(MSTCategory);
    query.limit(CAT_LIMIT);

    query.find().then(function(results) {
        var promise = Parse.Promise.as();
        _.each(results, function(result) {
            promise = promise.then(function() {
                var MSTProduct = Parse.Object.extend(MSTPRODUCT_CLASS);
                var ProdQuery = new Parse.Query(MSTProduct);
                ProdQuery.equalTo(CATEGORY_TAG, result);
                ProdQuery.include(CATEGORY_TAG);
                ProdQuery.include(SHOP_TAG);
                ProdQuery.descending(VIEWS_TAG);
                ProdQuery.limit(PROD_LIMIT);

                var category = result;
                ProdQuery.find().then(function(ProdResults){
                    ProdResults.forEach(function(product) {
                        productList.push(product);
                    });

                    var singleItem = {
                        "category" : category,
                        "products" : productList
                    };
                    CatAndProd.push(singleItem);
                    return Parse.Promise.as("Hello!");
                });
            });
        });
        return promise;
    }).then(function(hello) {
        var jsonObject = {
            "categoryAndProducts": CatAndProd
        };
        response.success(jsonObject);
    });
});

我要做的是在获取类别后,我在其中获取产品,将它们添加到jsonObject。一旦我完成了所有类别。我将创建一个数组来携带所有这些json对象并将其作为响应发送。这是非常基本的,我很确定它的逻辑是不正确的。我是Javascript和Parse的新手。

1 个答案:

答案 0 :(得分:0)

错误很少:

  • 在您的_.each中,您将覆盖每个循环中的相同承诺对象
  • 您可以通过承诺解决直接返回singleItem,而不需要额外的数组
  • 您正在使用全局productList数组,因此最后一个类别将包含所有产品。

尝试这样,我在代码中添加了一些注释:

query.find().then(function(results) {
    // an array to store all our promises
    var promises = [];

    results.forEach(function(result) {
        // one promise for each result
        var promise = new Parse.Promise();

        var MSTProduct = Parse.Object.extend(MSTPRODUCT_CLASS);
        var ProdQuery = new Parse.Query(MSTProduct);
        ProdQuery.equalTo(CATEGORY_TAG, result);
        ProdQuery.include(CATEGORY_TAG);
        ProdQuery.include(SHOP_TAG);
        ProdQuery.descending(VIEWS_TAG);
        ProdQuery.limit(PROD_LIMIT);

        var category = result;
        ProdQuery.find().then(function(ProdResults) {
            // remove this
            // ProdResults.forEach(function(product) {
            //     productList.push(product);
            // });

            var singleItem = {
                "category" : category,
                "products" : ProdResults
            };

            // pass singleItem directly when resolving the promises 
            promise.resolve(singleItem);
        });

        promises.push(promise);
    });

    // return a promise resolving when ALL Promises are resolved
    return Parse.Promise.when(promises);
}).then(function(allProducts) {
    // allProducts is an array of singleItem
    var jsonObject = {
        "categoryAndProducts": allProducts
    };
    response.success(jsonObject);
});

另外,请尝试不要混用Array.forEach_.each,同时使用其中一个但不能同时使用。{/ p>