Home > Blockchain >  How to fetch multiple GET URLs at once
How to fetch multiple GET URLs at once

Time:11-30

fetch(`./User.json`, { method: "get" })
.then(response => response.json())
.then(data =>
    data.results.forEach(result => (list.innerHTML  = template(result)))
)
.catch(error => console.log(error));

I want to add some json data. what's the solution. That's my code.

CodePudding user response:

Assuming you want all requests to complete, regardless of their response status, then Promise.allSettled() is an excellent choice

// handy "get" shortcut with error handling
const get = async (url) => {
  const res = await fetch(url) // "GET" is the default method
  if (!res.ok) {
    throw new Error(`${res.status}: ${await res.text()}`)
  }
  return res.json()
}

const urls = ["./Foo.json", "./Bar.json", "./Baz.json"]

Promise.allSettled(urls.map(get)).then(responses => {
  const data = responses
    .filter(({ status }) => status === "fulfilled")
    .map(({ value }) => value)
})

CodePudding user response:

You can use Promise.all method to get the values of the fetch calls once all the promises have resolved, you'd get the values in an array which you can destruct as shown below

    Promise.all([fetch(`./User.json`, { method: "get" }).then(response => response.json())]), fetch(`./Products.json`, { method: "get" }).then(response => response.json())]).then([users, products]=>
    users.results.forEach(result => (list.innerHTML  = template(result)))
)
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>

  • Related