У меня проблемы с получением объекта из Google Datastore.Вот мой код:
async function pushTaskIdToCurrentSession(taskId){
console.log(`Attempting to add ${taskId} to current Session: ${cloudDataStoreCurrentSession}`);
const transaction = datastore.transaction();
const taskKey = datastore.key(['Session', cloudDataStoreCurrentSession]);
try {
await transaction.run();
const [task] = await transaction.get(taskKey);
let sessionTasks = task.session_tasks;
sessionTasks.push(taskId);
task.session_tasks = sessionTasks;
transaction.save({
key: taskKey,
data: task,
});
transaction.commit();
console.log(`Task ${taskId} added to current Session successfully.`);
} catch (err) {
console.error('ERROR:', err);
transaction.rollback();
}
}
taskId
- это строковый идентификатор другого объекта, который я хочу сохранить в массиве свойства с именем session_tasks
.
Но это не такполучить это далеко.После этой строки:
const [task] = await transaction.get(taskKey);
Ошибка в том, что task
не определено: ERROR: TypeError: Cannot read property 'session_tasks' of undefined
at pushTaskIdToCurrentSession
Что-нибудь сразу очевидное из этого кода?
ОБНОВЛЕНИЕ:
Использование этого вместо: const task = await transaction.get(taskKey).catch(console.error);
Получает мне объект задачи, но, похоже, создает новую сущность в хранилище данных: ![datastore entity error](https://i.stack.imgur.com/uDFUM.jpg)
Я также получаю эту ошибку:
(node:19936) UnhandledPromiseRejectionWarning: Error: Unsupported field value, undefined, was provided.
at Object.encodeValue (/Users/.../node_modules/@google-cloud/datastore/build/src/entity.js:387:15)
Это говорит о том, что массив не поддерживается?