2

This is what works:

    const limit = 1000
    // fetchMyProducts(page, limit, flag)
    return fetchMyProducts(1, 1, true)
    .then(function (products) {
        return fetchMyProducts(2, limit, false)
    }).then(function (totalProducts) {
        return fetchMyProducts(3, limit, false)
    }).then(function (totalProducts) {
        return fetchMyProducts(4, limit, false)
    }).then(function (totalProducts) {
        return fetchMyProducts(5, limit, false)
    }).then(function (totalProducts) {
        return fetchMyProducts(6, limit, false)
    }).then(function (totalProducts) {
        return fetchMyProducts(7, limit, false)
    })

I am trying to get all the products in our system through fetch. The problem is, at the moment, I know how many products there are, but in 1 year / 3 years... who know??

I am trying to loop over a fetch dynamically and get all the products.

I have tried this, however it doesn't seem to get called at all.

    return fetchMyProducts(1, 1, true)
    .then(function (numberOfProducts) {
        let pages = Math.ceil(numberOfProducts / 1000) + 1;
        console.log(pages);
        return getAllProducts = () => {
            for (let i = 1; i < pages; i++) {
                const element = array[i];
                return fetchMyProducts(2, limit, false)

            }
        }
    }).then(... something else)

Is there a way to loop over a fetch promise and return something when it's finished, then continue on doing something else?

2
  • 1
    one does not return in a for loop and expect said loop to continue Commented Jan 24, 2018 at 4:34
  • I don't understand, if you want to get all product why you don't just create an api and call it ? Why have to make a lot of request to get all product ? Commented Jan 24, 2018 at 4:40

1 Answer 1

8

You are looking for

const limit = 1000
let chain = Promise.resolve();
for (let i=1; i<8; i++) {
    chain = chain.then(function(products) {
        return fetchMyProducts(i, limit, false)
    });
}
return chain;

which dynamically builds the promise chain that you spelled out.


For a more simple and efficient solution, consider using async/await:

const limit = 1000
for (let i=1; i<8; i++) {
    const products = await fetchMyProducts(i, limit, false);
}
return;
Sign up to request clarification or add additional context in comments.

1 Comment

That first one worked perfectly first time! You are a legend. Thank you so much.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.