Reputation: 2402
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();
};
Upvotes: 0
Views: 55
Reputation: 7780
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();
};
Upvotes: 1
Reputation: 1140
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
Upvotes: 2
Reputation: 11156
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);
})
})
});
Upvotes: 0