Я использую 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) он получил TypeError: Назначение постоянной переменной. at get_request_handler (/user_code/index.js:116:13)