我正在尝试从DialogFlow内联编辑器调用Cloud Firestore Beta,然后调用agent.add(...),但我不知道我需要做些什么才能使其工作。调用本身效果很好,但是我得到正确的值,但是执行继续,即使返回,Promise也不会继续执行agent.add()部分。这是我的代码:
function foodcatHandler(agent){
if (request.body.queryResult.allRequiredParamsPresent === true) {
var foodIDsRef = firestore.collection('foodcats').doc('foodIDs');
var category = request.body.queryResult.parameters['category-codes'];
console.log(category);
var catVal;
foodIDsRef.get().then( doc => {
console.log("Promise returned");
catVal = doc.get(category);
agent.add("Sounds like a plan");
agent.add("Here are all the restaurants serving " + category + " in your area.");
agent.add(new Card({
title: `Foody`,
text: `The easiest way to order is now even simpler!!`,
buttonText: 'Order Now!',
buttonUrl: 'https://beta.foody.com.cy/' + pcode + '?categories=' + catVal
})
);
});
}
}
不起作用的部分是agent.add()语句。控制台有时输出工作,而其他时间不输出。有人可以帮我解决这个问题吗?
在线研究后,找到了以下解决方案:
return foodIDsRef.get().then( doc => ...
显然,您需要返回承诺,这将允许代理继续对话。
答案 0 :(得分:0)
解决方案是您需要退还Promise。这就是调用数据库的地方,只需使用return关键字即可。