我有一个HTML表格,我想填充存储在Cloudkit Dashboard中的值。
我已成功检索记录并用它们填充我的表格,我注意到的问题是,如果我给它一些时间并尝试重新加载表格,则无法检索到某些记录。我之间没有改变任何代码,所以我对于如何/为何发生这种情况感到非常困惑。下面是我的代码示例和错误日志:
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
如果我删除了<td>" + record['created'].timestamp + "</td>
,那么错误日志会说下一个<td>
未定义。
要清楚的是,目前正在检索记录及其时间戳是否正确,并且还有其他记录正在被检索,而现在却没有,代码没有变化。
我在第3行的不同部分(在实际代码中有16个字段/ <td>
)的不同时间收到此错误,即使我知道这些字段已填充在记录中,并且还有检索那些未填充的字段的记录。
知道这里发生了什么吗?这是Cloudkit的错误还是我做错了什么?
答案 0 :(得分: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
}
如果检查这些对象的已删除属性,则可以在处理或呈现数据时忽略它们。