Javascript 从API调用解析JSON后,未将从意图提取的参数分配给变量

Javascript 从API调用解析JSON后,未将从意图提取的参数分配给变量,javascript,json,google-cloud-functions,actions-on-google,google-api-nodejs-client,Javascript,Json,Google Cloud Functions,Actions On Google,Google Api Nodejs Client,我正在从一个网站上获取JSON。当我使用console.log()打印时,一切都很好(我看到了打印所需的数据),但是通过Intent传递的参数没有被分配到变量,稍后我会将该变量放入导出,因此Google助手会告诉我信息 我做错了什么?下面的代码是在Dialogflow中运行的Google云函数 “严格使用”; //这就是我要说的信息 //“409路公共汽车站,nutrio bar” const request=require('request'); 让url为空https://www.SAMP

我正在从一个网站上获取JSON。当我使用
console.log()
打印时,一切都很好(我看到了打印所需的数据),但是通过Intent传递的参数没有被分配到变量,稍后我会将该变量放入导出,因此Google助手会告诉我信息

我做错了什么?下面的代码是在Dialogflow中运行的Google云函数

“严格使用”;
//这就是我要说的信息
//“409路公共汽车站,nutrio bar”
const request=require('request');
让url为空https://www.SAMPLESITE.com/Ajax/FindStationDevices?stationId=';
//使用样本数据创建变量,我总是从JSON中获取样本数据,但不是实时数据。
var arriveInG=“15:15”;
var delayG=“7:07”;
var arriveTimeG=“13:44”;
var distanceLeftG=“2.3公里”;
//从Google客户端库上的操作导入Dialogflow模块。
const{dialogflow}=require('actions-on-google');
//导入firebase功能包以进行部署。
const functions=require('firebase-functions');
//实例化Dialogflow客户端。
const-app=dialogflow({debug:true});
//处理名为“废话废话”的对话流意图。
//intent收集名为“总线线路,总线停止”的参数。
app.intent('getbastime',(conv,params)=>{
常数bLine=参数母线;
常数bStop=参数BUSTOP;
url+=bStop;
//这些是为了告诉我参数提取是否正确。
//conv.ask('你的幸运号码是'+bLine);
//conv.close(`yousaid${num}`);
//conv.ask('公共汽车站为:'+bStop+);
//conv.ask(‘公交线路为:’+bLine);
//conv.ask('URL为:'+URL);
请求({
url:url,
是的,
标题:{'User-Agent':'request'}
},(错误、恢复、数据)=>{
如果(错误){
log('Error:',err);
}否则如果(res.statusCode!==200){
console.log('Status:',res.statusCode);
}否则{
//在这里对接收到的数据执行一些操作
//数据已解析为JSON:
//console.log(data.schedule[0].data[0].text);
var i;
对于(i=0;iexports.dialogflowFirebaseFulfillment=functions.https.onRequest(应用程序)这里有两个相关的问题

第一个是,如果您正在进行异步调用,那么处理程序必须返回一个承诺。否则,库不知道异步调用何时完成,它拥有数据,您可以发回回复

由于您正在进行HTTP调用,这是一个异步请求,因此需要使用承诺来完成。最简单的方法是使用包而不是
请求

因此,代码的这一部分可能如下所示:

const request = require('request');
return request.get({
  url: url,
  json: true,
  headers: {'User-Agent': 'request'}
}).then( body => {
  // Process the body, which is already an object
}).catch( err => {
  // Error handling
});

第二个问题是,对
conv.ask()
的调用超出了带有响应的回调函数。在上面的代码中,它应该在“处理身体”的部分。

嘿,囚犯,谢谢,它像一个符咒一样工作,上帝保佑!