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

时间:2015-07-02 01:08:52

标签: javascript cloudkit cloudkit-web-services

我有一个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的错误还是我做错了什么?

1 个答案:

答案 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
}

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