将对象替换为保存前已经存在的对象

Swapping out an object for one that already exists before save

本文关键字:对象 存在 保存 替换      更新时间:2023-09-26

是否有可能在使用Parse时有一个beforeSave云函数,它不仅会修改被保存的对象,而且会将其交换为一个全新的对象。

例子…

我正在创建一个消息应用程序,使用自定义表情符号作为消息的一部分。

表情符号的图像都本地存储在设备上(旁边有一个列表来引用它们)。

因此,我在Parse中有一个Message表,其中包含指向Emoji表的指针数组。

Emoji表只有一个imageName条目,因此我存储的所有数据足以在所有设备上显示相同的图像。我不想上传和下载数百张图片。

所以,我现在的问题是,如果15个不同的人都用"Smiley Face"表情符号创建消息,那么我在表中有15个"Smiley Face"Emoji对象,但它们本质上都是相同的。

我想做的是有一个云代码before save函数,它将查看表情符号并找到一个相同的。如果它没有找到open,那么没关系,因为它会创建一个新的,但如果它找到了,那么它应该使用现有的,而不是创建一个副本。

当我创建消息时,我在一次保存中完成所有操作。我创建了message对象,并添加了emoji对象数组,然后在message上运行后台保存(也保存了子对象)。

我还没有得到任何代码,因为我真的不是一个JS开发人员,所以我不想只是开始破解。如果能得到一些指导就好了。

你不能在beforeSave中"重定向"一个对象,这样我就试图保存一个对象,而不是默默地更新另一个。你可以在beforeSave期间更新另一个对象,但为了防止保存新对象,你必须失败该操作,这听起来不像你想要做的。

可以给Message添加一个beforeSave钩子来更新指向Emoji的指针。但是,在您的情况下,这不会阻止Emoji中的新记录被创建,因为必须先创建这些记录才能创建Message中的指针。

如果您确实需要在Parse中使用的从MessageEmoji的指针,您只希望系统中的每个Emoji有一条记录,您可以:

  • 在启动时检索所有Emoji记录(并可能在本地缓存它们),并在创建新消息时将它们添加为指针

  • 使用云代码功能创建消息,根据参数或消息内容查找Emoji

您的消息表项可以使用指针(指向一个或多个解析文件)。

每个指针的详细信息…

{"toEmoji":{"__type":"File","name":"9d74eb8e-11bd-4bd0-9146-bc01c6656daa-......jpg","url":"http://files.parse.com/09d82830-ec2d-40b4-bb14-944728550685/9d74eb8e-11bd-4bd0-9146-bc01c6656daa-.......jpg"}}

所以,在对任何文件进行POST操作以上传新表情符号之前,运行您的进程以查找现有的DUPE。

onDupe()可以返回与File POST解析返回相同的签名…ie {"fileName": ", "fileUrl": "}

,然后它有点独立(不知道作为新消息指针目标的属性值是指向现有文件还是指向新文件)。