使用Node.js开发Dialogflow时如何在for循环外获取全部价格并展示给用户
问题根因
- 循环内每次都重新为
price变量赋值,上一轮循环的价格会被直接覆盖,循环结束后仅保留最后一次的赋值结果 - 未提前声明数组类型的容器来存储每一轮循环拿到的价格,所以无法留存所有价格数据
- 你使用的
var声明变量存在变量提升特性,循环内多次声明var price实际指向的是同一个变量,也加剧了值被覆盖的问题,日常开发更推荐用let、const声明变量
修正后的实现代码
const snapshot = await db.collection('hoteldetails').where('Price', '<=', maxnumber).where('Price','>=',minnumber).get() const result = snapshot.docs.map(doc => doc.data()); // 提前声明空数组存储所有符合要求的价格 const priceList = [] // 可额外存储完整酒店信息,方便后续用户选择后调取对应详情 const validHotels = [] if(result.length > 0){ for(let i = 0;i < result.length;i++) { const hotelname = result[i].HotelName; const city = result[i].City; const price = result[i].Price; // 将每轮的价格推入数组留存 priceList.push(price) validHotels.push({ hotelname, city, price }) } // 打印所有价格列表 console.log("所有价格:", priceList); // 拼接为对话所需的展示话术 const priceText = priceList.join('$、') + '$' const robotReply = `我查询到价格为${priceText}的酒店,请问您想选择哪一款?` console.log("机器人回复内容:", robotReply) }
额外注意事项
你当前返回的result数据里包含一条Price为100的记录,不符合110-180的查询范围,建议排查minnumber变量是否被正确赋值为110,避免后续查询结果出错。
内容的提问来源于stack exchange,提问作者lakshmi
相关产品推荐
相关产品推荐

