繁体   English   中英

在回调中使用await(Microsoft Bot Framework v4 nodejs)

[英]use await inside callback (Microsoft Bot Framework v4 nodejs)

我试图从回调内部将响应发送回chatbot emulator

async getUserDetails(step){
    console.log("inside get userdetaiuls modeiule")
    this.userDBObject.password = step.result;

   this.userDBMethod ( async function(response){
        console.log("inside callback return");
        console.log(response);
        await step.context.sendActivity(response); // not able to do this step
        return step.endDialog();
    });
}
async userDBMethod(callback){
request.post('#', 
        {form:{key: 'hi'}}, function (error, response, body) {
        callback("done");
});
}

我得到的错误是:

(节点:17424)UnhandledPromiseRejectionWarning:TypeError:无法对已在D. \\ LCI \\ Usecases \\ statementBalance \\ lionsbot-src \\ bot.js:384:32在Request._callback(D:\\ LCI \\ Usecases \\ statementBalance \\ lionsbot-src \\ bot.js:410:17)在Request.self.callback(D:\\ LCI \\ Usecases \\ statementBalance \\ lionsbot-src \\ node_modules \\ request \\ request.js:185:22)在Request.EventEmitter.emit(domain.js:442:20)在Request.emit(events.js:182:13)处。 (D:\\ LCI \\ Usecases \\ statementBalance \\ lionsbot-src \\ node_modules \\ request \\ request.js:1161:10)在Request.emit(events.js:182:13)在Request.EventEmitter.emit(domain.js: 442:20)。 (D:\\ LCI \\ Usecases \\ statementBalance \\ lionsbot-src \\ node_modules \\ request \\ request.js:1083:12)位于Object.onceWrapper(events.js:273:13)(node:17424)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。 引发此错误的原因可能是抛出了一个没有catch块的异步函数,或者是拒绝了一个.catch()无法处理的承诺。 (拒绝ID:1)(节点:17424)[DEP0018] DeprecationWarning:不建议使用未处理的承诺拒绝。 将来,未处理的承诺拒绝将以非零退出代码终止Node.js进程。

因此,我该如何在回调中使用await将响应发送回用户。 谢谢 !

我建议使用Axios (针对node.js的基于Promise的HTTP客户端)而非请求包。 由于Axios基于Promise,因此您可以使用async / await代替回调。 生成的代码更符合BotFramework的流程。 有关更多详细信息,请参见下面的代码片段和Axios文档

async getUserDetails(step){
    this.userDBObject.password = step.result;
    try {
        const res = await axios.post('#', {form:{key: 'hi'}});
        await step.context.sendActivity("Done");
    } catch (error) {
        console.log(error);
        await step.context.sendActivity("Sorry, we were not able to complete your request.");
    } 
    return step.endDialog();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM