【问题标题】:Not getting result from Cloud Code Parse未从 Cloud Code Parse 获得结果
【发布时间】:2015-10-21 08:25:27
【问题描述】:

我已经解决这个问题很长时间了,我想我有点放弃了,现在来这里问问。我有一个云代码功能,它首先让我得到一个类别列表。每个类别都有多个产品。这种一对多的关系是使用指针来实现的,其中每个产品都指向它所属的类别。但是我无法检索任何产品。

这是我的代码,

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 的新手。

【问题讨论】:

  • 您在浏览器控制台中看到任何错误吗?

标签: javascript parse-platform promise parse-cloud-code


【解决方案1】:

有几个错误:

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

这样试试,我在代码里放了几个cmets:

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,使用其中之一,但不要同时使用两者。

【讨论】:

    猜你喜欢
    • 2015-10-25
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 2018-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    相关资源
    最近更新 更多