【问题标题】:Parse Cloud function fails with error 141Parse Cloud 函数失败并出现错误 141
【发布时间】:2014-07-13 13:50:57
【问题描述】:

我想要完成的是,当我调用这个云函数 (deploy) 时,它会首先删除 toClass 中的所有数据,然后遍历 fromClass 中的对象,将它们复制并保存到 @987654324 @。当它保存一个对象时,它也会从fromClass 中删除它。简而言之,将对象从类移动到另一个。在客户端调用这个函数

[PFCloud callFunctionInBackground:@"deploy" withParameters:@{@"toClass": kTilrClassUpdates, @"fromClass": kTilrClassPrototypeUpdates} block:^(id object, NSError *error) {
    if (error) {
        [self failed];
    } else {
        [self succeeded];
    }
}];

会将此错误信息打印到客户端日志:Error: undefined (Code: 141, Version: 1.2.19)

这是 Parse Cloud 的代码:

Parse.Cloud.define("deploy", function(request, response) {
    var query = new Parse.Query(request.params.toClass);
    query.find({
        success: function(results) {
            for (var i = 0; i < results.length; ++i) {
                console.log(results[i]);
                results[i].destroy({
                    success: function(object) {

                    },
                    error: function(object, error) {
                        response.error(error);
                    }
                });
            }
        },
        error: function() {
            response.error(error);
        }
    });
    var query2 = new Parse.Query(request.params.fromClass);
    query2.find({
        success: function(results) {
            for (var index = 0; index < results.length; ++index) {
                var UpdateInfoClass = Parse.Object.extend(request.params.toClass);
                var updateInfo = new UpdateInfoClass();
                for (var k in results[index]) {
                    updateInfo.set(k, results[index][k]);
                }
                console.log(updateInfo);
                updateInfo.save(null, {
                    success: function(updateInfo) {
                        results[index].destroy();
                        if (index == results.length - 1) {
                            response.success();
                        }
                    },
                    error: function(updateInfo, error) {
                        response.error(error);
                    }
                });
            }
        },
        error: function() {
            response.error(error);
        }
    });
});

我真的不太了解 JavaScript,所以这可能是一个非常简单的错误。

【问题讨论】:

    标签: javascript ios parse-platform


    【解决方案1】:

    有几个部分可以保证为您解决问题: 在不质疑您的设计的同时:

    1) 查询不会链接在一起,而是会同时运行

    2) 你不能使用

    for (var k in results[index]) {
        updateInfo.set(k, results[index][k]);
    }
    

    将属性从一个对象复制到另一个对象。 您需要调用JSON.stringify(results[index]) 来获取标准数组。 您应该通过 request.object.set(fiedlName, value) 之类的方式设置值。

    3) “索引”不会正确传播到子块中 - 将其登录到控制台,您会看到,因为这些查询也没有链接起来,它会立即运行,因此索引将具有一些值或最后一个值因为它很快

    但是,您的方法的设计是有问题的:

    Database on parse 与普通的 sql 数据库有点不同,你也许应该重新设计你的方法,也许使用一个类,只是通过名称标记对象的类或更改它们的状态(已部署 = 0 / 1),很难猜到你想完成什么,但你的方式保证了一些问题。

    另请注意,cloudcode 函数确实有一些超时,因此一旦您拥有更多对象,您可能无法保存所有对象。 (150个对象是乐观的看法)

    您可以通过编写适当的“.beforeSave”函数来实现您的解决方案,该函数在您保存对象时触发,这样您就可以根据您的条件用新对象替换旧对象...

    【讨论】:

    • 您对一类和不同状态的建议听起来很棒。我会尝试一下,但我必须重写我的客户端逻辑,所以它不会立即完成。
    猜你喜欢
    • 1970-01-01
    • 2016-08-21
    • 2011-08-24
    • 2014-04-10
    • 2016-12-21
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    相关资源
    最近更新 更多