当意图具有较大的逻辑并且使用Axios进行api调用时,有时agent.add()无法正常工作

时间:2019-12-30 09:14:20

标签: node.js axios dialogflow

我的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调用也是如此,则它存在超时和回调函数问题(也许),这会导致在接口中不打印响应的问题(测试控制台)

我真的需要帮助。预先感谢。

1 个答案:

答案 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()