解析云代码升序/ limit won'

Parse cloud code ascending / limit won't work in query in promise

本文关键字:won limit 代码 升序      更新时间:2023-09-26

在下面的云代码中,第一个查询运行良好。

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

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);
        }) ...

我很惊讶它与我们的没有排序和限制条件。(我不明白你是如何把.then()链到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);
    });
});

注意我们是如何从一个承诺到另一个承诺的吗?通过返回我们想要的对象作为下一个的输入。还请注意,只要我们遵循从解析返回结果的规则,该链可以在末尾有一个拒绝函数,也可以在中间有一个拒绝函数。