js sdk 1.3.3 和nodejs sdk 都是最新版本

nodejs服务端:接口
AV.Cloud.define("tpl_save_all", function (request, response) {
    var tplobj = request.params.tplobj;
    var tpldata = request.params.tpldata;
  
    // todo
}

客户端调用:
tplobj,和tpldata 都为av object对象,其中tpldata 中包含array的 pointer对象

 AV.Cloud.rpc('tpl_save_all', {"tplobj":tplobj,"tpldata":tpldata}, {
        success: function (result) {
            console.log(result); 
        },
        error: function (error) {
  console.log(error);
        }

客户端调用的时候报错如图:

请问运行云函数rpc 有什么问题,谢谢指出!

看起来是 tplobj 或 tpldata 中有指向其他对象的 Pointer,而这个被指向的对象还没有保存(调用 save),你需要先保存这些对象。

功能背景:这是我一个作品对象,分不同的表信息,刚制作的时候都是新建的AV object对象还没有objectId,所以想以av object对象,包含了pointer对象属性的值 通过云代码 在服务端进行保存操作,想的是能在服务端保存速度加快,我一个作品平均包含50来个数据对象操作,甚至更多。

那你上面讲的,意思是我的pointer对象数据还没有保存过没有objectId 就不能走rpc调用了方式了?

如果需要在对象保存时执行操作,可以使用 Class Hook;如果希望批量保存对象,可以使用 AV.Object.saveAll.

恩,那报错是什么引起的,怎么可以避免他?

报错就是因为tplobj 或 tpldata 中有指向其他对象的 Pointer,而这个被指向的对象还没有保存呀,你需要先保存这些对象。

但是这个 tpl_save_all我在客户端js 脚本进行保存的时候是没有报错的,并且很稳定的跑了一年多了,现在只不过是我js 客户端传这个参数到 云代码的过程中报错了,难道是rpc 不支持这种结构传参吗?

因为 rpc 不支持这种「在客户端进行修改,然后将未保存的对象发到服务器做保存」的情况,因为 rpc 是要通过网络的,如果允许未保存的对象发送到服务器会带来更多不稳定的因素,所以目前并不支持。

好的,清楚了,谢谢!