Вы можете разбить свой вопрос на две части:
- Как мы обновляем запись с учетом ее ID?
- Как второй обработчик намерений узнает, какой идентификатор обновлять?
Как обновить запись с учетом ее идентификатора?
Вы не можете использовать метод push()
, так как он сохранит данные в новый ID. Вы также не хотите использовать метод set()
, поскольку этот заменяет данные в идентификаторе новыми данными.
Вместо этого вы хотите получить ссылку на запись с ID, а затем обновите его с помощью метода update()
.
Если мы предположим, что наш идентификатор находится в переменной с именем id
, это может выглядеть примерно так
const ref = admin.database().ref('data').child(id);
return ref.update({
prtype: t1,
desc: t6,
when: t7
});
Но откуда мы берем идентификатор?
Как передать идентификатор от первого обработчика намерений второму?
Идентификатор генерируется, когда мы вызываем push()
в нашем первом обработчике намерений, поэтому нам нужно захватить его в этот момент.
Но чтобы передать его второму обработчику намерений, нам нужно сохранить его в a параметр контекста с использованием метода agent.context.set()
. Метод set()
принимает имя контекста, необязательную продолжительность жизни (для скольких вызовов Intent это будет сохранено) и объект, содержащий строки атрибутов / значений.
Это может выглядеть примерно так:
const dataRef = admin.database().ref('data');
const newRef = dataRef.push();
const id = newRef.key;
return newRef.set({
name: t2,
college: t3,
branch: t4,
year: t5
})
.then( () => {
agent.context.set({
name: "reportInfo",
lifespan: 5,
parameters: {
id: id
}
});
});
позже, во втором обработчике намерений, вы получите этот идентификатор из контекста, как вы догадались, agent.context.get()
, а затем получите от него параметр id
. Так что, возможно, что-то вроде этого:
const reportInfoContext = agent.context.get('reportInfo');
const id = reportInfoContext.parameters.id;
, а затем используйте это, как описано выше.