我是Firebase实时数据库和Google Dialogflow的新手。我仔细阅读了文档并继续进行。我正在从数据库中读取数据,我想在聊天中显示它。我可以在日志中看到数据,但无法在聊天对话中显示。如果我查看日志,则可以看到成功或失败的结果,但无法在聊天对话中查看。
这是下面的代码:
var childData = "";
var message = '';
var query = '';
var key = '';
function wheretogo(agent) {
//taking country name as input from user
var country = request.body.queryResult.parameters.country;
//reference country from the database
query = admin.database().ref("country").orderByKey();
query.once("value")
.then(function(snapshot) {
snapshot.forEach(function(childSnapshot) {
key = childSnapshot.key;
childData = childSnapshot.val();
//matching the input from user and the country name(key) from database
if (country === key) {
console.log("sucess");
message = 'Thats nice ! You are travelling to ' + key;
agent.add(message);
}
else
{
console.log("failed");
}
});
});
}
我希望输出结果“很好!您正在我的聊天对话中以国名前往'。
答案 0 :(得分:0)
问题在于,如果您执行任何异步调用,则Dialogflow库希望您返回Promise。由于您正在进行异步调用(query.once()
调用),因此必须返回Promise。否则,处理程序调度程序将不等待来自数据库的答复,然后再尝试向用户发送答复。
您不会显示所有代码,但就您而言,它看起来相当简单。由于query.once()
返回了Promise,因此您可以返回此Promise。像这样的变化
return query.once("value")
可能只需要这些。