AnswerBun.com

How to use a promise inside a promise?

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();
};

3 Answers

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

Add your own answers!

Related Questions

Implementing an interface with partial delegation

1  Asked on November 22, 2021 by fabrizio

   

postgresql execute dynamic sql command

2  Asked on November 22, 2021 by boothy

 

How to make dict from dataframe?

2  Asked on November 22, 2021 by oumayma-hamdi

       

IOS Full Screen App: why does toolbar appears when page changes?

1  Asked on November 22, 2021 by joel-hoelting

     

azure build pipeline does not start as triggered

2  Asked on November 22, 2021 by oleksa

 

How to fix Exception with queryStringParameters?

1  Asked on November 22, 2021 by mvn-2047

     

PostGIS ST_X() precision behaviour

1  Asked on November 22, 2021 by vance-tunnicliffe

     

merge Map and Array of objects by key

2  Asked on November 22, 2021

   

Changing react barcode format

1  Asked on November 22, 2021 by mig_08

   

MongoDB Document of Size 300kb taking 8-15s

2  Asked on November 22, 2021 by liqteq-developer

   

Ask a Question

Get help from others!

© 2023 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP