Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在nodejs中从内部函数调用外部函数?我正在为Google dialogflow实现编写代码 朋友们好,请帮助我编写dialogflowfulfillment 下面是我在内部请求模块中调用GET Api的代码,我想在conv.ask('Sales is 1000000公吨'+b)_Javascript_Node.js_Rest_Dialogflow Es - Fatal编程技术网

Javascript 如何在nodejs中从内部函数调用外部函数?我正在为Google dialogflow实现编写代码 朋友们好,请帮助我编写dialogflowfulfillment 下面是我在内部请求模块中调用GET Api的代码,我想在conv.ask('Sales is 1000000公吨'+b)

Javascript 如何在nodejs中从内部函数调用外部函数?我正在为Google dialogflow实现编写代码 朋友们好,请帮助我编写dialogflowfulfillment 下面是我在内部请求模块中调用GET Api的代码,我想在conv.ask('Sales is 1000000公吨'+b),javascript,node.js,rest,dialogflow-es,Javascript,Node.js,Rest,Dialogflow Es,代码: 这里有一些问题 首先是了解request()在做什么。您可能不想要request()返回的内容,而是想要访问主体,这是您从定义的函数中获得的 该函数实际上是传递给request()的第二个参数。它被称为回调函数,因为当request()从URL获取数据时,它将调用该函数。因此,您想要对body执行的所有操作都需要在回调函数中完成 但是,由于您使用的是Dialogflow库,并且这是在一个意图处理程序中完成的,因此您需要返回一个承诺,表明您正在等待结果,然后它才能回复用户。虽然您可以将re

代码:


这里有一些问题

首先是了解
request()
在做什么。您可能不想要
request()
返回的内容,而是想要访问
主体
,这是您从定义的函数中获得的

该函数实际上是传递给
request()
的第二个参数。它被称为回调函数,因为当
request()
从URL获取数据时,它将调用该函数。因此,您想要对
body
执行的所有操作都需要在回调函数中完成

但是,由于您使用的是Dialogflow库,并且这是在一个意图处理程序中完成的,因此您需要返回一个承诺,表明您正在等待结果,然后它才能回复用户。虽然您可以将
request()
包装在承诺中,但有更好的解决方案,最明显的是使用与请求包非常相似的包,但使用承诺

这让事情变得容易多了。您的代码可能更像这样(未经测试):


只需将
conv.ask
放入
request
回调函数中即可。或者使用async/await.it不起作用。你能用代码大致解释一下吗?因为我是初学者,这对我会有很大的帮助。谢谢@Molda
var request = require('request');
var code1 = null;
const bodyParser = require('body-parser')
const { dialogflow } = require('actions-on-google');

const assistant = dialogflow({
    clientId: "305xxxx407-rv9kocdxxxxxxxxxciouuq8f9ul2eg.apps.googleusercontent.com"
});

module.exports = (app) => {
        const logger = console;
        assistant.intent('Sales', (conv) => {
            const baseurl = 'https://www.ixxxxxxt.in:3500/getunits?unitcode=4';
            var a = request(baseurl, function(error, res, body) {
                var Unit = JSON.parse(body);
                if (!error && res.statusCode == 200) {
                    var code = JSON.stringify(Unit.description);
                    //res.render(test(Unit));
                    console.log(code); // Print the google web page.
                }
            })
            var b = (a.code);
            console.log(b);
            conv.ask('Sales is 1 million metric tonnes ' + b);
        })
var request = require('request-promise-native');
var code1 = null;
const { dialogflow } = require('actions-on-google');

const assistant = dialogflow({
    clientId: "305xxxx407-rv9kocdxxxxxxxxxciouuq8f9ul2eg.apps.googleusercontent.com"
});

module.exports = (app) => {
    const logger = console;
    assistant.intent('Sales', (conv) => {
        const baseurl = 'https://www.ixxxxxxt.in:3500/getunits?unitcode=4';
        return request(baseurl)
            .then( body => {
                // You don't need the body parser anymore
                let code = body.description;
                conv.ask('Sales is 1 million metric tonnes ' + code);
            })
            .catch( err => {
                console.error( err );
                conv.ask('Something went wrong. What should I do now?');
            });
    })