我正在尝试从回调内部将响应发送回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:Cannot 对已被撤销的代理执行“获取” 在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.emit(events.js:182:13) 在Request.EventEmitter.emit(domain.js:442:20) 应要求。 (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) 在IncomingMessage。 (D:\ LCI \ Usecases \ statementBalance \ lionsbot-src \ node_modules \ request \ request.js:1083:12) 在Object.onceWrapper(events.js:273:13)(node:17424)处UnhandledPromiseRejectionWarning:未处理的诺言拒绝。这个 由抛出异步函数引起的错误 没有障碍,或者拒绝了没有处理的承诺 使用.catch()。 (拒绝ID:1)(节点:17424)[DEP0018] DeprecationWarning:已弃用未处理的承诺拒绝。在 未来,未处理的承诺拒绝将终止 具有非零退出代码的Node.js进程。
所以我该如何在回调内部使用await将响应发送回用户。 谢谢!
答案 0 :(得分:0)
我建议您使用Axios(用于node.js的基于Promise的HTTP客户端)而非请求包。由于Axios基于Promise,因此您可以使用async / await代替回调。生成的代码更符合BotFramework的流程。有关更多详细信息,请参见下面的代码段和Axios Documentation。
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();
}