【问题标题】:Loop through a firebase realtime database循环通过 firebase 实时数据库
【发布时间】:2021-01-06 19:39:10
【问题描述】:

我是编程新手。

我有一个 firebase 实时数据库。我的目的是在满足条件时从实时数据库中获取数据。这意味着使用循环语句。

代码如下:

    function firestore(agent) {
    var firebaseEntity = agent.parameters.firebase;
    return admin.database().ref('questions').once("value").then((snapshot) => {
        var questionList = snapshot.child("Entity").val();
            for (const i in questionList) {
              if (questionList[i].entity == firebaseEntity);
                var response = questionList[i].response;
    agent.add(`${response}`);
}
});
}

当用户的输入与“问题”列匹配时,我想返回“响应”:

【问题讨论】:

  • Firebase 实时数据库和 Cloud Firestore 是两个独立的数据库。您使用的是实时数据库,而不是 Cloud Firestore。我已经从您的问题中删除了该标签,但建议您也更新代码以删除函数名称中对 Firestore 的引用,以防止将来出现。/进一步混淆。

标签: javascript firebase-realtime-database dialogflow-es dialogflow-es-fulfillment


【解决方案1】:

您的代码存在一些问题:

  1. /questions 下没有Entity 节点,因此您的questionList 将始终为空。
  2. 每个单独的问题下甚至都没有Entity 节点,因为它被称为entity,带有小写的e
  3. 我建议使用 Firebase 的内置 forEach 函数来迭代子节点,而不是 for... in

这些:

function firestore(agent) {
  var firebaseEntity = agent.parameters.firebase;
  return admin.database().ref('questions').once("value").then((snapshot) => {
    snapshot.forEach((questionSnapshot) => {
      let question = questionSnapshot.val();
      if (question.entity == firebaseEntity) {
        cont response = question.response;
        agent.add(`${response}`);
      }
    });
  });
}

【讨论】:

  • 我希望在“if”语句之后的行更清晰。例如,'questionList[i]' 没有定义。
  • 我也修复了那个语法错误。不过,请在发布之前尝试自己解决其他小问题,因为这里预计会有一些自给自足。
猜你喜欢
  • 1970-01-01
  • 2022-12-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-19
相关资源
最近更新 更多