我正在创建一个代理,可以从数据库(Firebase上的实时数据库)读取数据列表 . 通过上下文和参数,我可以触发webhook并获取我想要的数据 .
但是因为结果是List,输出文本将太长而无法一次性说出所有数据,所以我想每次从列表中返回一个孩子并询问用户“你想阅读下一节吗?” . 如果用户说“是”,我会继续阅读,直到结束 . 如果用户说“不”,我将触发一个事件 .
对于循环我使用这个:
ref.once('value', function(snapshot) {
snapshot.forEach(function(childSnapshot) {
var childKey = childSnapshot.key;
var childData = childSnapshot.val();
// ...
});
});
(https://firebase.google.com/docs/database/web/lists-of-data#listen_for_value_events)
但是这会将列表中的所有数据都放在一个 . 如何输出一个数据并询问用户是否允许,然后继续列表中的下一个数据?我的查询是如何在读取列表之间通过Dialogflow-fulfillment请求权限,然后根据用户给出的响应继续列表?如有任何澄清,请写信 .
1 回答
你必须使用orderByValue()/ orderByChild(),limitToFirst()和startAt()方法的组合来限制返回给你的记录数 .
orderByValue()/ orderByChild()将需要一个属性/子节点,用于定义您希望项目显示的顺序 .
limitToFirst()将决定您希望在每次调用中获得多少行
startAt()将需要您正在排序的字段的值,并且每次请求下一组行时都必须更新 .
你可以阅读更多关于这些方法here