如何处理对Firestore的Promise调用并调用agent.add()

时间:2018-07-10 12:07:01

标签: javascript promise chatbot

我正在尝试从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 => ...

显然,您需要返回承诺,这将允许代理继续对话。

1 个答案:

答案 0 :(得分:0)

解决方案是您需要退还Promise。这就是调用数据库的地方,只需使用return关键字即可。