1

我正在使用 firebase 来托管云功能,因为很多功能(几乎每个)我都需要发出 http 请求并获取 json 主体以从中获取数据。但是,回调对我来说效果不太好,我已经搜索了一些现有的答案,但仍然停留在这个问题上。这是代码片段,之前声明了选项,如果我没有将请求放在 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 而不是进入那个请求体。如果我不创建 get_request_handler 并离开 req(options, function (error, response, body) { ... } 它可以正常工作。对此有什么想法吗?

注意:我刚刚检查了firebase日志,它说这一行: req(options, function (error, response, body) it got TypeError: Assignment to constant variable. at get_request_handler (/user_code/index.js:116:13)

4

1 回答 1

2

您在这里有很多问题,但基本问题是您在assistant.ask()对用户的响应中尝试多次调用。一旦您调用assistant.ask(),就无法发送进一步的响应,并且不会ask()处理任何其他调用。

看起来您正在使用它进行调试。当您应该使用console.log().

您还表示您正在使用 Firebase 函数。请注意,如果您使用免费计划,则来自 Firebase 函数的调用会受到限制。如果您使用其中一个付费计划,则没有任何限制,并且有一个免费层级,对于测试来说应该绰绰有余。

于 2017-08-16T12:25:51.113 回答