首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bot框架异步问题

Bot框架异步问题
EN

Stack Overflow用户
提问于 2018-10-30 06:21:24
回答 1查看 574关注 0票数 1

我正在微软机器人框架上试验翻译服务。我已经编写了一个方法,我向该方法传递一个回调函数,该函数接收我翻译的文本。

我有一个现有的bot,它调用HTTP端点来创建英语输出。在将输出返回给用户之前,我希望将输出翻译成不同的语言。我未修改的代码如下所示:

代码语言:javascript
复制
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)的函数来完成此任务。我已将此调用添加到现有函数中以获取:

代码语言:javascript
复制
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‘”。

有人能建议我如何保持上下文对象处于活动状态吗?

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-11-17 16:04:00

非常感谢大家的帮助-我从来没有完全弄清楚这个问题,但我最终通过完全重写代码修复了这个问题。我认为这个问题是由大量嵌套的同步和异步调用引起的。我的最终解决方案是完全摆脱所有嵌套-首先调用翻译服务(并等待它),然后进行原始调用。

我认为在这两个功能的方法中还有许多其他的异步线程。我对node的工作原理不是很了解,但我猜响应是在错误的位置从堆栈中弹出的,这就是我没有看到它的原因。事实证明,“无法执行get”错误有点离经叛道。我从微软的一些有效的演示代码中得到了同样的错误。我确信有一个单独的问题应该被修复,但它实际上不是由这个问题引起的。代码正在运行,但输出正在丢失。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53054736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档