Stack Overflow Asked on January 5, 2022
I´m trying to generate a pseudo XML with car brands and models. but I´m getting an error in
ReferenceError: models is not defined. is that because is a promise? what´s the correct way to do this? thank you
const output = () => {
const id = 1
brand(id)
.then((brand) => {
const models = models(brand.id)
let xml = '<brand>';
models.map((model) => {
xml += '<brand>' + model.name + '</brand>';
});
xml += '</brand>';
return response.send(xml);
})
});
const brand = (id) => {
return database
.collection("brands")
.doc(id)
.get();
};
const models = (brandId) => {
return database
.collection("brands")
.doc(brandId)
.collection("models")
.get();
};
You need to also resolve the models promise. I'd also rename your methods to avoid conflicting names. See example:
const output = () => {
const id = 1
getBrand(id)
.then((brand) => {
return getModels(brand.id)
.then(modules => {
let xml = '<brand>';
models.map((model) => {
xml += '<brand>' + model.name + '</brand>';
});
xml += '</brand>';
return response.send(xml);
});
})
});
const getBrand = (id) => {
return database
.collection("brands")
.doc(id)
.get();
};
const getModels = (brandId) => {
return database
.collection("brands")
.doc(brandId)
.collection("models")
.get();
};
Answered by Soc on January 5, 2022
There are a couple of issues.
First, you are using models
before it's defined, which will cause a problem.
Second, models is indeed a promise, so you can't assign it to a variable directly.
I suggest using async/await
for this:
const brand = (id) => {
return database
.collection("brands")
.doc(id)
.get();
};
const models = (brandId) => {
return database
.collection("brands")
.doc(brandId)
.collection("models")
.get();
};
const output = async () => {
const id = 1
const brand = await brand(id);
const models = await models(brand.id)
let xml = '<brand>';
models.map((model) => { xml += '<brand>' + model.name + '</brand>'; });
xml += '</brand>';
return response.send(xml);
});
Also, response is not defined here, but I'm guessing you have it somewhere else. Otherwise this too will fail
Answered by BravoZulu on January 5, 2022
Ciao, you should call .then
also for models
like:
const output = () => {
const id = 1
brand(id)
.then((brand) => {
models(brand.id)
.then((models) => {
let xml = '<brand>';
models.map((model) => {
xml += '<brand>' + model.name + '</brand>';
});
xml += '</brand>';
return response.send(xml);
})
})
});
Answered by Giovanni Esposito on January 5, 2022
2 Asked on December 22, 2021
1 Asked on December 22, 2021 by kyu96
1 Asked on December 22, 2021 by prawn
2 Asked on December 20, 2021 by aworeham
2 Asked on December 20, 2021
2 Asked on December 20, 2021 by fuzzyfiso
5 Asked on December 20, 2021 by p-emt
1 Asked on December 20, 2021
2 Asked on December 20, 2021 by user13953317
1 Asked on December 20, 2021 by rosalind-goh
1 Asked on December 20, 2021 by el_1988
2 Asked on December 20, 2021
1 Asked on December 20, 2021 by papelr
2 Asked on December 20, 2021
2 Asked on December 20, 2021
1 Asked on December 20, 2021 by ger-cas
0 Asked on December 20, 2021 by susanta
1 Asked on December 20, 2021 by anuj-amin
Get help from others!
Recent Questions
Recent Answers
© 2023 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, MenuIva, UKBizDB, Menu Kuliner, Sharing RPP, SolveDir