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?');
});
})