无法从Firebase数据库接收数据

时间:2018-10-08 17:17:31

标签: firebase google-cloud-firestore google-cloud-functions dialogflow

我正在尝试在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);
});

不幸的是,该代理仅返回空响应,但日志中包含预期的数据。我在做什么错,在这里?

1 个答案:

答案 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的更多信息