我正在微软机器人框架上试验翻译服务。我已经编写了一个方法,我向该方法传递一个回调函数,该函数接收我翻译的文本。
我有一个现有的bot,它调用HTTP端点来创建英语输出。在将输出返回给用户之前,我希望将输出翻译成不同的语言。我未修改的代码如下所示:
await request.post(ENDPOINT,
{
headers: HEADERS,
json: BODY
},
async function (error, response, body) {
if (response.statusCode == 202) {
var msg = body.mainResponse.text;
context.sendActivity(msg);
}
});这运行得很好。在HTTP响应体中传递的数据将被解析,并发送回用户。
现在我想插入我的翻译服务。我调用了一个名为Translator.translate(text, callback)的函数来完成此任务。我已将此调用添加到现有函数中以获取:
await request.post(ENDPOINT,
{
headers: HEADERS,
json: BODY
},
async function (error, response, body) {
if (response.statusCode == 202) {
var msg = body.mainResponse.text;
await Translator.translate(msg, function (output) {
context.sendActivity(output);
});
}
}
);我的翻译过程运行,并在output变量中获得翻译结果,但没有任何内容返回给用户。查看终端,我看到了与回调中的context.sendActivity行相关的错误“无法在已撤销的代理上执行'get‘”。
有人能建议我如何保持上下文对象处于活动状态吗?
提前谢谢。
发布于 2018-11-17 16:04:00
非常感谢大家的帮助-我从来没有完全弄清楚这个问题,但我最终通过完全重写代码修复了这个问题。我认为这个问题是由大量嵌套的同步和异步调用引起的。我的最终解决方案是完全摆脱所有嵌套-首先调用翻译服务(并等待它),然后进行原始调用。
我认为在这两个功能的方法中还有许多其他的异步线程。我对node的工作原理不是很了解,但我猜响应是在错误的位置从堆栈中弹出的,这就是我没有看到它的原因。事实证明,“无法执行get”错误有点离经叛道。我从微软的一些有效的演示代码中得到了同样的错误。我确信有一个单独的问题应该被修复,但它实际上不是由这个问题引起的。代码正在运行,但输出正在丢失。
https://stackoverflow.com/questions/53054736
复制相似问题