2014-07-13 82 views
0

我试图做到的是,当我把这种云功能(deploy),它会首先从toClass删除所有数据,然后在fromClass遍历对象,复制并保存他们toClass 。当它保存一个对象时,它也会从fromClass中删除它。简而言之,将对象从课程移到另一课程。在客户端调用此函数解析云功能失败,错误141

[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.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)“索引”不会正确地传播到子块中 - 将其记录到控制台中,你会看到,因为这些查询也没有被链接,并且它会立即运行,因此索引将有一些值或最后之一,因为它是快速

然而,你的设计方法是值得商榷的:

上解析数据库是从普通的SQL数据库有点不同,你或许应该重新设计你的方法可能使用一个类里通过名称标记对象的类或者改变它们的状态(deploy = 0/1),很难猜测你想要完成什么,但是你的方式保证了一些问题。

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

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

+0

您对一个班级和不同州的建议听起来很棒。我会尝试一下,但是我必须重写我的客户端逻辑,以免它立即完成。 – imas145