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
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP