我有一个iOS应用程序,我用Parse作为后端编写。
用户可以在系统中存储项目。项目具有与之关联的一个或多个图片。默认情况下,用户的项目和图片只能由该用户访问。用户可以生成项目的警报。当项目具有警报时,将对项目及其图片进行公共读取访问。当警报到期时,我想撤销对这些对象的公共读访问权。
目前,我在创建提醒时通过iOS客户端添加公共访问权限。由于警报可能会过期或被用户关闭,我正试图在after_save
处理程序中处理Parse的Cloud Code中的另一半代码。
我目前正在尝试以下方法:
if (alert.get("isActive") === false) {
// This alert has been rendered inactive, so make sure all photos are not publically readable
var photos = alert.get("photos");
if (photos !== undefined && photos.length > 0) {
for (var i = 0; i < photos.length; i = i + 1) {
var photo = photos[i];
photo.fetch().then(function () {
var photoACL = photo.getACL();
photoACL.setPublicReadAccess(false);
photo.setACL(photoACL);
photo.save();
});
}
}
}
警报有一个名为“照片”的数组。其中每个都应该是一个指向parseClassName“photo”的对象的指针。
当我查看我的控制台日志时,我看到了针对传入警报报告的内容的预期数据。我看到警报及其属性等。具体来说,“照片”数组看起来像我认为应该。
但问题是,我似乎无法弄清楚如何操纵该数组。我一直遇到的错误是我无法在setPublicReadAccess
上致电undefined
。很好,这意味着photoACL
是undefined
,但是为什么? alert.photos
数组中的项目是ParseObject
个实例。那么.fetch()
不应该有效吗?
此外,当我尝试将对象本身记录到控制台时(使用console.log(JSON.stringify(photo))
),我得到奇怪的不一致结果。有时候我只得到{"objectId":"whatever"}
,但有时我会看到包含所有属性的整个对象。
答案 0 :(得分:1)
Fetch将获取的对象传递给回调,它不会将其分配给原始&#34;照片&#34;变量:
photo.fetch().then(function (photo) {
// "photo" now refers to the fetched object
});
我认为这应该可以解决您遇到的未定义问题。