无法从 Cloudkit Cloud (JS) 检索所有记录

Posted

技术标签:

【中文标题】无法从 Cloudkit Cloud (JS) 检索所有记录【英文标题】:Can't retrieve all records from Cloudkit Cloud (JS) 【发布时间】:2015-07-02 01:08:51 【问题描述】:

我有一个 html 表格,我想用存储在 Cloudkit 仪表板中的值填充。

我已成功检索记录并用它们填充我的表,我注意到的问题是,如果我给它一些时间并尝试再次重新加载表,一些记录将无法检索。在这期间我没有更改任何代码,所以我对这是如何/为什么发生这种情况感到非常困惑。下面是我的代码示例和错误日志:

public-query.js:

records.forEach(function(record)   
var fields = record.fields;  
var tableActual = "<tr><td>" + record['created'].timestamp + "</td><td>" + fields['placeName'].value + </td></tr>  
                    document.write(tableActual)  

错误日志:

Uncaught (in promise) TypeError: Cannot read property 'timestamp' of  undefined
at public-query.js:49:73
at Array.forEach (native)
at public-query.js:47:29

如果我删除例如&lt;td&gt;" + record['created'].timestamp + "&lt;/td&gt;,那么错误日志将显示下一个&lt;td&gt; 未定义。

需要明确的是,当前检索到的记录带有正确的时间戳,还有其他记录正在检索但现在没有检索到,代码没有变化。

我在第 3 行的不同部分在不同时间收到此错误(在实际代码中有 16 个字段/&lt;td&gt;),即使我知道这些字段已填充到记录中,并且还检索了记录这些字段未填充。

知道这里发生了什么吗?这是 Cloudkit 的错误还是我做错了什么?

【问题讨论】:

您介意在bugreport.apple.com 发布一个错误,其中包含有关您的容器、记录类型等的更多私密细节吗? 嗨,戴夫,我发送了错误报告 【参考方案1】:

如果您查看CloudKit Web Services Query Reference 底部的讨论部分,您会看到:

索引是异步更新的,因此不能保证它们是最新的。

您的查询中返回的某些记录可能被标记为已删除并且不包含其字段,因此您需要在假设字段存在并访问它们之前检查这一点。以下是您可能会看到的示例响应:


    "records": [
        "recordName": "195055b3-1db7-4d75-86f0-d9aef8d8381b",
        "deleted": true
    , 
        "recordName": "712525a8-eccf-4da7-b2d9-981f120bcc82",
        "deleted": true
    ],
    "total": 2

如果您检查这些对象上的已删除属性,那么您可以在处理或呈现数据时忽略它们。

【讨论】:

以上是关于无法从 Cloudkit Cloud (JS) 检索所有记录的主要内容,如果未能解决你的问题,请参考以下文章

CloudKit 无法从公共容器中获取数据。错误 1/4000

无法从 CloudKit 通知信息和用户信息结构中获取 CKRecord.ID

无法从应用程序扩展访问我的“CKContainer”中的任何数据 - CloudKit,Swift

无法让 CloudKit 进行身份验证(使用 Javascript 和服务器到服务器密钥)

CloudKit iOS:用户无法删除应用程序数据

CloudKit 光标错误和无法返回所有行 - 获取记录时遇到错误