node.js - Dialogflow V2 错误 - 异步调用不起作用 - 承诺错误?火力基地功能
问题描述
我想从 mongodb 获取一些数据(使用 mongoose 框架)但无法获取数据,
以前我使用这里描述的回调方法来获取在“谷歌v1 上的操作”中对我来说效果很好但在 v2 中不起作用的数据,
然后我在这里读到我们必须使用promise才能在“对google v2的操作”中进行异步调用,然后我根据上面问题中@prisoner先生的指示重构了我的代码
你可以在这里看到我的代码:
import * as functions from 'firebase-functions';
import {
dialogflow,
SimpleResponse,
Suggestions,
DialogflowConversation,
DialogflowApp
} from 'actions-on-google'
import { Model } from './db'
const app = dialogflow({ debug: false })
app.middleware((conv) => {
conv["hasScreen"] =
conv.surface.capabilities.has('actions.capability.SCREEN_OUTPUT');
conv["hasAudioPlayback"] =
conv.surface.capabilities.has('actions.capability.AUDIO_OUTPUT');
});
app.intent('Get Some Data', (conv) => {
console.log("Get Some Data Intent triggered")
return new Promise(function (resolve, reject) {
Model.find({}, (err, result: any) => {
if (!err) {
if (!result.length) {
console.log("no data found")
conv.ask(new SimpleResponse({
speech: "no data found"
}))
resolve();
} else {
console.log("lots of data found")
conv.ask(new SimpleResponse({
speech: "lots of data found"
}));
resolve();
}
} else {
console.log("Error in getting data: ", err);
conv.ask(new SimpleResponse({
speech: "Error in getting data"
}))
resolve();
}
})
})
});
exports.webhook = functions.https.onRequest(app);
它仍然对我不起作用,并且功能以超时结束
实际上,我的应用程序在 v1 中已启动并正常运行,现在我正在尝试从 v1 迁移到 v2,因为我需要使用 v1 中不可用的一些最新功能,例如语音身份验证和其他新功能。任何帮助都将受到热烈欢迎
解决方案
您在讨论的 Mongoose 文档中find()
引用的页面还提供了有关如何将其与 Promises 一起使用的信息。该find()
调用返回一个查询,您可以使用它query.exec()
来获取您将使用的 Promise。
所以代码可能看起来像这样(未经测试,因为我不使用猫鼬):
app.intent('Get Some Data', (conv) => {
var query = Model.find({});
return query.exec()
.then( result => {
if( !result || !result.length ){
return conv.ask(new SimpleResponse({
speech: "no data found"
}));
} else {
return conv.ask(new SimpleResponse({
speech: "some data found"
}));
}
})
.catch( err => {
return conv.close(new SimpleResponse({
speech: "something went wrong"
}));
});
});
推荐阅读
- python - 创建具有特定依赖项的 requirements.txt
- sql - 如何区分没有 ID 的日志在 SQL 上单独聚合?
- azure - Azure DevOps 数据工厂数据集和管道 CI/CD 参数
- postgresql - 取决于特殊变量 OLD、NEW、TG_OP 等的 PostgreSQL (PL/pgSQL) 触发函数是否可以是纯的,因此是 IMMUTABLE?
- json - 将 JSON 字段值映射到数据类值
- python - 消息中间的 Python 输入
- javascript - 这是一个可能的 xss 漏洞吗?
- javascript - 如何通过在Javascript中获取来初始化变量
- php - 可以使用 web flutter 创建管理面板并在移动端 Flutter 应用程序中使用它
- r - 按列名和行名合并两个矩阵