【发布时间】:2019-05-01 13:01:19
【问题描述】:
我正在编写一个简单的 Google Action,它将读取 Firebase 实时数据库,并在响应中返回结果。我的问题是,只有在至少 2 次尝试后,查询结果才会被传回以响应 DialogFlow。 下面的屏幕截图显示了模拟器中的最终结果 First query screenshot 响应的第一行是从云函数返回的,其中包含通过“上下文”传递的值。此响应中没有第二行。
下面是第二次发送完全相同的请求后显示结果的屏幕。 Second query screenshot 第一行和之前一样,但这次我也得到了包含查询结果数据的第二行。
看起来我的代码正在“工作”(我从数据库中获取了正确的数据),但由于某种原因,它只有在我快速连续触发至少 2 次时才有效。
以下是处理此请求的代码:
function googleAssistantHandler(agent) {
let conv = agent.conv();
let outCommandContext = agent.getContext('outcommand');
let outCharacterContext = agent.getContext('outcharacter');
let character = outCharacterContext.parameters.character;
let command = outCommandContext.parameters.command;
agent.add('<prosody rate="140%" pitch="0.4">' + character +' '+ command +'</prosody>');
var movesRef = admin.database().ref('characters/'+character.toLowerCase()+'/moves/');
movesRef.limitToFirst(1).orderByChild("notation")
.equalTo(command.toString()).on("child_added",function(snapshot){
agent.add(`record number is ` + snapshot.key);
});
}
我尝试过使用 once() 而不是 on() (因为在我的情况下更有意义...我不需要监听数据库的更改,我只想检索一次数据) - 但是,我无法让它工作。
你们能帮我理解为什么我的查询只在第二次触发后才返回结果吗? 谢谢!
【问题讨论】:
标签: firebase firebase-realtime-database google-cloud-functions dialogflow-es actions-on-google