Parse Cloud 函数失败并出现错误 141
Posted
技术标签:
【中文标题】Parse Cloud 函数失败并出现错误 141【英文标题】:Parse Cloud function fails with error 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,所以这可能是一个非常简单的错误。
【问题讨论】:
【参考方案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”函数来实现您的解决方案,该函数在您保存对象时触发,这样您就可以根据您的条件用新对象替换旧对象...
【讨论】:
您对一类和不同状态的建议听起来很棒。我会尝试一下,但我必须重写我的客户端逻辑,所以它不会立即完成。以上是关于Parse Cloud 函数失败并出现错误 141的主要内容,如果未能解决你的问题,请参考以下文章
Parse Cloud Code 嵌套查询上的代码 141(错误:未调用成功/错误)