У меня есть функция, которая использует обещания.
Я выполнил код через https.onRequest (), и он записывает в базу данных, однако, когда я использую тот же код в документе (). OnCreate (), он просто внезапно останавливается, и я получаюсообщение в журналах функций «Игнорирование исключения из завершенной функции» без других записей журнала.
Код перестает выполняться после комментария "// код состояния сервера".В консоли я вижу ответ избирателя JSON с сервера, за которым следует код состояния.Я пытался использовать collection (). Doc (). Set () и .add ().Ранее в журналах я получал сообщение об ошибке «Функция вернула неопределенное, ожидаемое обещание или значение», которого я не получаю в https.onRequest ().Код идентичен за исключением кода .onCreate (), извлекающего дополнительную информацию из базы данных при запуске.
Любая помощь будет принята с благодарностью.
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.testonupdate = functions.firestore.document("users/{userId}/voterRegistration/infoToSubmit").onCreate((snap, context) => {
console.info('New voter info has been added to check verification')
const voterValues = snap.data();
console.info('database values: ' + voterValues);
const voterInfo = {
'firstName': voterValues.firstName,
'lastName': voterValues.lastName,
'dob': voterValues.dob,
'street': voterValues.street,
'city': voterValues.city,
'zip': voterValues.zip
}
const userID = voterValues.userId
console.info('voter info values: ' + voterInfo + userID)
var request = require('request');
var jar = request.jar();
var voteUrl = 'https://'
var utahApi = 'https://'
var xsrfOptions = {
url: voteUrl,
method: 'get',
jar: jar
};
// initial promise
var options = new Promise((resolve, reject) => {
request.get(xsrfOptions, () => {
var fullCookie = jar.getCookies(voteUrl);
resolve(fullCookie);
})
})
options.then((value) => {
//parse cookie returned from var options and dump into headers
var cookieToString = value.toString()
var xsrfCookie = cookieToString.slice(0, 47)
var slicedCookie = cookieToString.slice(11, 47)
console.info('slicedCookie :' + slicedCookie)
//POST request data
return {
uri: utahApi,
headers: {
'Host': 'votesearch.utah.gov',
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:66.0) Gecko/20100101 Firefox/66.0',
'Accept': 'application/json, text/plain, */*',
'Accept-Language': 'en-US,en;q=0.5',
'Accept-Encoding': 'gzip, deflate, br',
'Referer': voteUrl,
'Content-Type': 'application/json;charset=utf-8',
'X-XSRF-TOKEN': slicedCookie,
//'Content-Length': '300', LEAVE THIS COMMENTED OUT OR SERVER WILL NOT RESPOND
'Connection': 'keep-alive',
'Cookie': xsrfCookie,
'Pragma': 'no-cache',
'Cache-Control': 'no-cache'
},
method: 'POST',
json: true,
//user info goes here
body: {
'firstName': voterValues.firstName,
'lastName': voterValues.lastName,
'dob': voterValues.dob,
'street': voterValues.street,
'city': voterValues.city,
'zip': voterValues.zip
}
}
}).then((options) => {
console.info('starting request...')
// voter registration request
request(options, (error, response, body) => {
if (!error && response.statusCode === 200) {
console.info(response.body.voter); // voter response
console.info(response.statusCode); // server status code
admin
.firestore()
.collection("users")
.doc("userID")
.set(response.body);
} else {
console.info('failed response code ' + response.statusCode);
console.info('failed at retreiving voterInfo ' + error);
}
});
// return console.info('did we finish?')
//catch any error messages
}).catch((err) => {
console.info('errored at end of function: ' + err);
})
})