我想要完成的是当我调用此云函数(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,所以这可能是一个非常简单的错误。
答案 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;来实现您的解决方案。保存对象时触发的函数,这样就可以根据条件用新对象替换旧对象......