在我的dialogflow代理中,为实现目标,我在代码中扮演了一个部分,我称其为诺言,而机器人则用来自服务器的一些数据来响应用户。如果成功,一切都会按预期进行。但是,如果发生错误(例如服务器断电),我想向用户显示一条消息,指出发生了错误,并且他/她不需要等待永恒的答案。
return new Promise( (resolve,reject) => {
const request = require('request-promise-native');
const options = {
uri: 'https://server.server.com/example',
method: 'POST',
headers: {
'api-token': 'code'
},
body: {
user:'user_name'
},
json: true
};
request(options)
.then(function (body) {
// POST succeeded
console.log("got: "+ body);
agent.add("SUCCESS");
resolve();
})
.catch(function (err) {
// POST failed...
console.log("ERROR!: " + err);
agent.add("I am sorry for the inconvenience but an error happened during your last call.");
agent.add("Please try in a while");
console.log(err.stack);
});
});
POST消息失败后的错误消息被打印在日志文件中(因此它位于.catch部分),但是用户没有收到任何消息,agent.add()函数在该文件中不起作用的情况下,这似乎很奇怪。答应程序失败后,如何向用户打印消息?
答案 0 :(得分:1)
然后,您可以根据发布请求的响应尝试这样做。例如,构建一个promise函数,并在发生错误时拒绝错误。然后,在您的意图处理程序中,获得拒绝的答案,如果函数存在拒绝响应,则显示错误消息。
我对'request-promise-native'不熟悉,但是您可以在promise中使用'request'模块尝试
netlify.toml
然后在您的意图处理程序中
request.post(options, (error, response, body) => {
if (error) {
console.log(error);
reject(error);
}
else {
answer = body;
resolve(answer);
}
});
答案 1 :(得分:0)
使用try-catch语句?我不知道会发生什么错误,但是如果您收到错误消息,您肯定可以抓住它吗?