0

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

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

公共查询.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

如果我删除例如,<td>" + record['created'].timestamp + "</td>那么错误日志会说下一个<td>是未定义的。

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

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

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

4

1 回答 1

1

如果您查看CloudKit Web 服务查询参考底部的讨论部分,您将看到:

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

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

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

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

于 2015-07-09T22:20:11.290 回答