Я пытаюсь сделать PDF-файл, получая данные из firestore, используя функции firebase, но теперь у меня проблема.У меня есть такая структура данных:
- Коллекция
- Документ
- Поле 1
- Поле 2
- Другая коллекция
- Документ2 ...
Мне нужно конвертировать это struture в json, чтобы показать на pdfMake.Я знаю, что должен использовать обещания, но конечный объект не выглядит так, как я ожидал.Когда я использую первый слой (только поле из первых документов), он работает нормально, но когда я пытаюсь зайти в ту же коллекцию документов, я получаю сообщение об ошибке.Я поставлю код ниже.
Ошибка в том, что мой «второй затем» возврат до того, как первый «потом» будет разрешен, поэтому мой файл PDF отображает пустой файл на экране.Это не показывает никакой ошибки, но на консоли я вижу, что данные выбираются после того, как ответ будет возвращен.Мне нужно разрешить первые, затем включенные в цикл перед отправкой любого ответа, но это не происходит
exports.helloPDF = functions.https.onRequest( (request, response) => {
try {
db.collection('lista_substituicao').get().then((lista_substituicao) =>{
let docDefinition = { //definitions will be used on pdf file
background: function () {
return [
{
image: 'bg.jpg',
width: 550
}
];
},
content: []
};
lista_substituicao.forEach( grupo => {
let grupoDef = {id: grupo.id, ...grupo.data()}
let tabelaGrupo = {
table: {
widths: ['*'],
body: [
[`Grupo ${grupoDef.grupo}`]
]
}
}
db.collection(`lista_substituicao/${grupoDef.id}/alimentos/`).get().then(alimentos =>{
let alimentosTable = {
table: {
widths: ['*'],
body: [
["Alimento"]
]
}
}
alimentos.forEach(alimentoDef =>{
let alimento = {id: alimentoDef.id, ...alimentoDef.data()}
alimentosTable['table']['body'].push([alimento.alimento])
})
tabelaGrupo['table']['body'].push(alimentosTable)
docDefinition['content'].push(tabelaGrupo)
})
})
return docDefinition
}).then((finalDocDefinition) =>{
console.log(finalDocDefinition) // i get undefined here
let doc = printer.createPdfKitDocument(docDefinition);
response.setHeader('Content-Type', 'application/pdf');
doc.end();
return doc.pipe(response)
})
} catch (error) {
console.log(error)
}
})