解析云功能失败,错误141

时间:2014-07-13 13:50:57

标签: javascript ios parse-platform

我想要完成的是当我调用此云函数(deploy)时,它将首先删除toClass中的所有数据,然后迭代fromClass中的对象,复制并将它们保存到toClass。保存对象时,它也会从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,所以这可能是一个非常简单的错误。

1 个答案:

答案 0 :(得分: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)&#34;索引&#34;将不会正确传播到子块 - 将其记录到控制台中,您将看到,因为这些查询也没有链接,它会立即运行,因此索引会有一些值,或者最后一个,因为它很快

但是,您的方法设计值得怀疑:

解析时的数据库与普通的sql数据库有点不同,你或许应该重新设计你的方法,或许只使用一个类,只是按名称标记对象的类或改变它们的状态(deploy = 0/1),它我很难猜到你想要完成什么,但你的方式可以保证一些问题。

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

您可以通过写下适当的&#34; .beforeSave&#34;来实现您的解决方案。保存对象时触发的函数,这样就可以根据条件用新对象替换旧对象......