Не удается получить все записи из Cloudkit Cloud (JS)
У меня есть 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 ответ
Если вы посмотрите раздел "Обсуждение" в нижней части Справочника по запросам веб-служб CloudKit, вы увидите:
Индексы обновляются асинхронно, поэтому они не гарантируют актуальность.
Возможно, что некоторые записи, возвращенные в вашем запросе, будут помечены как удаленные и не будут содержать их полей, поэтому вам нужно проверить это, прежде чем предполагать, что поля существуют, и получить к ним доступ. Вот пример ответа, который вы можете увидеть:
{
"records": [{
"recordName": "195055b3-1db7-4d75-86f0-d9aef8d8381b",
"deleted": true
}, {
"recordName": "712525a8-eccf-4da7-b2d9-981f120bcc82",
"deleted": true
}],
"total": 2
}
Если вы проверите для этих атрибутов удаленный атрибут, то можете игнорировать их при обработке или рендеринге данных.