通过函数callback为api.ai获取json主体

我正在使用firebase来托pipe云端function,因为我需要做很多的function(大概每一个),让http请求得到json主体来从中获取数据。 但是,callback对我来说工作不太好,我已经search了一些现有的答案,但仍然卡住了这一点。 这里是代码片段,选项之前声明,如果我不把它的请求get_request_handler它工作正常:

function get_request_handler(assistant, input_url, callback) { req(options, function (error, response, body) { if (!error && response.statusCode == 200) { var cookie = req.cookie('BPMSTS=' + body ); var headers = { 'Content-Type': 'application/json', 'Cookie': cookie }; var option = { url: input_url, method: 'GET', headers: headers } req(option, function(error, res, body) { assistant.ask(input_url); if (!error && res.statusCode == 200) { callback(JSON.parse(body)); } else { assistant.ask('inner request with error code: ' + (res.statusCode).toString()); } }); } else { assistant.ask('outer request with error code: ' + (response.statusCode).toString()); } }); } 

我把这个函数调用如下:

 get_request_handler(assistant, workflow_url, function(cur_json){assistant.ask(cur_json);}); 

现在的问题是无法在get_request_handler函数中发出第一个请求。 换句话说,它只进入get_request_handler,而不进入请求体。 如果我不创buildget_request_handler和左req(选项,函数(错误,响应,身体){…}它没有任何问题的任何想法。

注意:我刚刚检查了firebase日志,它说这行:req(选项,函数(错误,响应,正文)它得到了TypeError:赋值给常量variables在get_request_handler(/user_code/index.js:116:13)

这里有很多问题,但基本的问题是,您在对用户的响应中尝试多次调用assistant.ask() 。 一旦你打电话给assistant.ask() ,就不会有更多的回应被发送,其他的ask()函数也不会被处理。

看起来你正在使用它进行debugging。 当你使用console.log()时,这似乎是一个非常糟糕的select。

您还表示您正在使用Firebasefunction。 请注意,如果您使用的是免费套餐,则从Firebasefunction发出的电话会受到限制。 如果你在付费计划中没有任何限制,并且有一个免费的级别,这应该足够用于testing。