我正在研究解析云代码功能,该功能执行query并随后过滤results 这些是我用JavaScript编写的第一行代码,因此我不知道如何解决以下问题。

问题是,我的过滤谓词需要一些存储在someArray变量中的元素。 还没有获取someArray所有元素。 但是获取一个Parse.Object是异步调用,因此我没有机会返回filter()期望的truefalse

我怎么解决这个问题?

或我误解了一个事实,即当我不获取arrayElement

console.log("arrayElement with name: ".concat(typeof(arrayElement), arrayElement.get("name")));

版画

arrayElement with name:objectundefiend

虽然我知道由arrayElment表示的arrayElment有一个始终定义的name arrayElment

//The cloud code
Parse.Cloud.define("search", function(request, response) {
    var query = new Parse.Query("Location");
    query.withinKilometers("gps", request.params.searchLocation, request.params.searchRadius / 1000);
    query.find({
        success: function(results) {
            // results is an array of Parse.Object.
            var locations = results.filter(function(location) {
                console.log("Location with name: ".concat(location.get("name")));
                var someArray = location.get("someArray");
                if (someArray instanceof Array) {
                    console.log("The array of this location has ".concat(someArray.length, " elements."));
                    someArray.forEach(function(arrayElement) {
                        arrayElement.fetch().then(
                            function(fetchedArrayElement) {
                                // the object was fetched successfully.
                                console.log("arrayElement with name: ".concat(typeof(fetchedArrayElement), fetchedArrayElement.get("name")));
                                if (menuItem) {};
                                return true;
                            }, 
                            function(error) {
                                // the fetch failed.
                                console.log("fetch failed");
                            });
                    });
                }
            });
            response.success(locations);
        },
        error: function(error) {
            // error is an instance of Parse.Error.
            response.error(error);
        }
    });
});

一些有用的链接:

===============>>#1 票数:4 已采纳

如果我没看错,那么您就有了Parse Objects的数组列。 您应该在查询中使用include方法,以便在初始查询中获取对象。

query.include('someArray');

我认为您不需要使用过滤器,而应在此处查看Promises文档: https : //parse.com/docs/js_guide#promises

没错,由于它是异步的,因此您需要等待所有操作完成后再调用代码中当前未发生的response.success Promises和定义使用Promises的自己的异步功能是链接功能并等待功能组完成之后再继续的好方法。

如果您想做的所有事情都包括该列,那么整个过程应该是:

Parse.Cloud.define("search", function(request, response) {
  var query = new Parse.Query("Location");
  query.include('someArray');
  query.withinKilometers("gps", request.params.searchLocation, request.params.searchRadius / 1000);
  query.find().then(function(results) {
    response.success(locations);
  }, function(error) {
    response.error(error);
  });
});

  ask by Robin des Bois translate from so

未解决问题?本站智能推荐:

关注微信公众号