我正在尝试在Dialogflow响应中显示Firebase数据库中的数据。
这是我的代码:
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
const agent = new WebhookClient({ request, response });
function getArtikel (agent) {
return db.collection('artikel').get()
.then(doc => {
db.collection('artikel').get().then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
console.log(doc.id, " => ", doc.data());
return agent.add(doc.data());
});
});
return Promise.resolve('Search finished');
}).catch(() => {
agent.add('Error');
});
}
let intentMap = new Map();
intentMap.set('GetArtikel', getArtikel);
agent.handleRequest(intentMap);
});
不幸的是,该代理仅返回空响应,但日志中包含预期的数据。我在做什么错,在这里?
答案 0 :(得分:1)
由于db.collection('artikel').get()
返回promise
,因此返回空响应。这意味着它异步运行。如果您登录了Chrome,则可以在扩展数组后看到结果(请查看[i]图标)
您只需在函数中添加async
并在返回后添加await
即可解决问题:
async function getArtikel (agent)
return await db.collection('artikel').get()
查看this video以获得有关async/await
的更多信息