首先,感谢这个令人惊叹的社区。我必须告诉我,我对编程非常陌生(我更像是一名统计学家),但到目前为止它似乎非常具有挑战性和乐趣!最近我一直……
这里有一些问题,一些是相关的,一些不是。让我们来看看其中的一些。
对于初学者,你有一个比较
if( action === 'get.data' ){
但'动作'没有在任何地方定义或分配。所以这个块永远不会被执行(并且从不调用数据库,它看起来像)。
目前尚不清楚你是如何做一些任务的。当您获得查询的输出时,您的行是
output = callDB().then( ( output ) =>{
这似乎是混合了一个Promise回来并试图使用Promise完成的结果。我怀疑第二个“输出”是你想要的而不是第一个,因为我希望稍微有点清楚。
在那里面 then() 你正在发回JSON,但也是(在...之外) then() 试图使用Dialogflow库设置上下文,设置回复,并提供建议芯片。混合这两种方法不起作用 - 发送JSON或使用库。
then()
从那以后复杂化了 callDB() (你在之前打过电话 then() )生成要发回的JSON。再次 - 选择一种方法或另一种方法。我怀疑有更好的方法 callDB() 实际上调用数据库并可能按摩并返回一个Promise,调用方法的结果格式化为您希望用户听到/看到的内容。
callDB()
说到Promises,它就是 的 好 强> 那 callDB() 返回一个Promise。但是,您没有以两种方式正确处理该承诺:
首先,自从 getInfo() 调用异步运行的东西(即 - 调用 callDB() )它也必须返回一个承诺。这就是为什么你可能不想从中捕获结果 callDB() 正如我上面提到的。最简单的方法是让代码执行类似的操作
getInfo()
return callDB().then( output => { // Output things are fine. }).catch( err => { // Output the world is ending. };
你如何处理Promises的第二个问题是你当前的实现 getInfo() 有代码 后 这个街区。目前,这是你所做的一切 agent.setContext() 和 agent.add() 调用。那些 必须 在里面 then() 块。 (我的“事情很好”评论在上面。)
agent.setContext()
agent.add()