我是Node js和使用Dialogflow开发聊天机器人的新手。 为了从firebase获得特定的响应,我必须调用以下函数。
admin.database().ref(institutes+'/'+ Programme).once("value").then((snapshot) => {
reply= snapshot.val();}).then((reply) => {
for (var key in reply)
{
console.log('1 executed');
admin.database().ref(institutes+'/'+ Programme +'/' + key + '/' + 'Group').once("value").then((datagroup)=>
{
if(datagroup.val() == Group)
{
console.log('2 executed');
result+=key;
}
});
}
});
agent.add(`Hello`);
代码成功运行并回复了hello消息,但未执行for循环内编写的函数。也就是说,在控制台中,没有类似1已执行或2已执行的消息。
答案 0 :(得分:-1)
我建议您使用以下示例代码来构造代码:
function readFromDb (agent) {
// Get the database collection 'dialogflow' and document 'agent'
const dialogflowAgentDoc = db.collection('dialogflow').doc('agent');
// Get the value of 'entry' in the document and send it to the user
return dialogflowAgentDoc.get().then(doc => {
if (!doc.exists) {
agent.add('No data found in the database!');
} else {
agent.add(doc.data().entry);
}
return Promise.resolve('Read complete');
}).catch(() => {
agent.add('Error reading entry from the Firestore database.');
agent.add('Please add a entry to the database first by saying, "Write <your phrase> to the database"');
});
}
代码取自this github file in the dialogflow/fulfillment-firestore-nodejs
repo
我用它制作了用于在firebase上部署的node.js代码。我不使用for,但在mi情况下,我需要使用if,这可以完美地工作。