解析云代码升序/限制在promise中的查询中不起作用

时间:2015-09-07 00:17:18

标签: javascript parse-platform cloud-code

在以下云代码中,第一个查询工作正常。

在链式查询中,如果包含两行代码:

query.ascending("createdAt");       // NOTE
query.limit(5);                     // NOTE

它不起作用!如果你注释掉这两行代码,它就会很好用。可能是什么问题?

它不会抛出任何错误,但根本不会执行.each。如果你注释掉有问题的两行代码,那么.each会对找到的所有结果完美地执行。

Parse.Cloud.define("someFunction", function(request, response)
{
    var query = new Parse.Query("Club");
    query.equalTo("objectId", request.params.club);
    query.first(
    {
        success: function(object)
        {
            return object;
        },
        error: function(error) {...}

    }).then(function(club)
    {
        var query = new Parse.Query("Player");
        query.equalTo("club", club);
        query.include("user");
        query.ascending("createdAt");       // NOTE
        query.limit(2);                     // NOTE
        query.each(function(employee)
        {
            var teste = employee.get("email")
            console.log("teste  ... "  + teste);
        }) ...

1 个答案:

答案 0 :(得分:1)

我很惊讶它与我们合作没有排序和限制资格。 (我不知道如何将first()链接到// return a promise fulfilled with a Club object whose id is 'clubId' function clubWithId(clubId) { var query = new Parse.Query("Club"); return query.get(clubId); // prettier than "objectId" equalTo and first() } // return a promise fulfilled with up to 'limit' Players belonging to 'club' object function playersWithClub(club, limit) { var query = new Parse.Query("Player"); query.equalTo("club", club); query.include("user"); query.ascending("createdAt"); query.limit(limit); return query.find(); } 的回调版本。代码可以被清理并且可以工作 - 我认为 - 通过将自己限制为承诺 - 返回各种解析方法。

我还建议为每个逻辑块分解为小的,承诺返回的函数。有了......

// a great toolbox for dealing with collections and other stuff
var _ = require('underscore');

Parse.Cloud.define("someFunction", function(request, response) {
    var clubId = request.params.club;
    clubWithId(clubId).then(function(club) {
        return playersWithClub(club, 2);
    }).then(function(players) {
        _.each(players, function(player) {
            var user = player.get("user");
            console.log("username is: " + user.username);
        });
        response.success(players);
    }, function(error) {
        response.error(error);
    });
});

通过这些整洁,可测试的单个部件,我们可以更自信地构建云功能,如下所示......

{{1}}

请注意我们如何从承诺到承诺?通过将我们想要的对象作为输入返回到下一个。另请注意,只要我们遵循从分辨率返回结果的规则,链在末尾可以具有单个拒绝功能,或者干预链接功能。