我的diaflowflow代理中没有几个意图,我已经使用Dialogflow的内联编辑器为其编写了函数,因此,在几个意图中,我正在使用具有某种逻辑的Axios调用一些API,为此,这不是有时可以在测试控制台上提示消息,但可以轻松在控制台中打印日志。
我要附加一些伪代码-:
function someintent(agent){
return new Promise((resolve, reject) => { // Tried using promises as well but didn't work
const parameter1 = agent.parameters.parameter1;
const parameter2 = agent.parameters.parameter2;
// Some of the code is just logic, Problem mainly occurs at line no 39
if (parameter1 != ''){
if (parameter1.toString().length !=9){
agent.add('Please enter valid 9 digit number');
agent.context.set({
'name':'someintent-followup',
'lifespan': 0
});
}
else{
if(isNaN(parameter1)){
agent.add('Please enter integer');
agent.context.set({
'name':'previous-followup'
});
}
/**
* Main area which creates problem is below code.
*
*/
else{
agent.add('What is the nature of your Business ?'); // This is not working sometimes
return axios.post('http://some-test-api/',
{"parameters1": parameter1}).then((result) => {
console.log(result.data);
console.log('Store data to api');
//agent.add('What is the nature of your Business ?'); // I tried here also which is also not working sometimes
});
}
}
}
else{
agent.add('What is the nature of your Business ?');
return axios.post('http://some-test-api/',
{"parameters2": parameter2}).then((result) => {
console.log(result.data);
console.log('Store data to api');
});
}
resolve(); // Resolving promise
}
根据我的理解,问题是如果意图具有相当大的逻辑,并且对于某些API调用也是如此,则它存在超时和回调函数问题(也许),这会导致在接口中不打印响应的问题(测试控制台)
我真的需要帮助。预先感谢。
答案 0 :(得分:0)
听起来您有两个潜在问题:
第一个是,听起来您担心使用axios进行的异步调用将花费“太长时间”。如果呼叫和您的其他处理花费了几秒钟以上,这可能是一个问题。
但是看起来更可能的是您如何使用axios拨打电话并使用Promises引起问题。
使用显示的代码,您将返回新的Promise对象,但是在执行代码中,您将返回axios Promise,因此从未进行对 <properties>
<ojdbc6.version>11.2.0.2.0</ojdbc6.version>
</properties>
<dependency>
<groupId>com.oracle.ojdbc6</groupId>
<artifactId>ojdbc6</artifactId>
<version>${ojdbc6.version}</version>
</dependency>
的调用。仅当异步操作本身已解决时,您才应该调用resolve()
。
但是由于resolve()
返回了Promise,所以您不需要将其包装在自己的Promise中。您只需要返回每个axios调用中的Promise / then链。
因此您的代码可能看起来像(未经测试):
axios.post()