मेरे पास आईडी की एक सूची है यानी: [३,६,७] मैं एपीआई से सभी वस्तुओं को लाना चाहता हूं जिसमें आईडी के रूप में ३,६ और ७ हैं। मैं इसे केवल एक आईडी के साथ ला सकता हूं। इस तरह:

 const response = await fetch(`http://localhost:3000/api`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json; charset=utf-8',
    },
    body: JSON.stringify({
      id: 7,
    }),
  });

मैं विभिन्न आईडी के साथ कैसे ला सकता हूं? अग्रिम में धन्यवाद।

0
Negarin 29 अक्टूबर 2019, 12:51

3 जवाब

सबसे बढ़िया उत्तर

आप Promise.all https:// का इस्तेमाल कर सकते हैं Developer.mozilla.org/vi/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

const promises = [3,6,7].map(id => {
  return fetch(`http://localhost:3000/api`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json; charset=utf-8',
    },
    body: JSON.stringify({
      id,
    }),
  })
})

const response = await Promise.all(promies)
console.log(responese)
1
Giang Le 29 अक्टूबर 2019, 09:55

fetch(...) एक वादा लौटाता है।

await fetch(...) उस लौटाए गए वादे का परिणाम प्राप्त करता है।

तो एक बार में एक से अधिक कॉल करने के लिए आपको कई वादों को संभालने की आवश्यकता होती है।

const p1 = fetch(...)
const p2 = fetch(...)
const p3 = fetch(...)

const [p1Result, p2Result, p3Result] = await Promise.all(p1, p2, p3);

उन लाने वालों के परिणामों को परिणाम स्थिरांक में डाल देंगे।

0
liamgbs 29 अक्टूबर 2019, 09:58

अपने अनुरोधों को एक ऐरे में रखना और उनके समाप्त होने की प्रतीक्षा करना सबसे अच्छा है।

const myLogic = () => {
    //Put ids in function and get responses
    getByIds([3,6,7]).then(responses => {
        console.log(responses);        
    });
}

const getByIds = async (ids) => {
    //put all promises in an Array so we can let them run and be awaited
    //await is bad practise in loops and usually does not work
    let requests = [];
    let responses = [];

    for (let id in ids)
        requests.push(fetch(`http://localhost:3000/api`, {
            method: 'POST',
            body: JSON.stringify({ id }),
            headers: { 'Content-Type': 'application/json; charset=utf-8' },
        })
            //Add response to array
            .then(response => responses.push(response))
            .catch(err => console.log(err)));

    //Await all requests
    await Promise.all(requests);

    //return all responses
    return responses;
}
0
Nick Prozee 29 अक्टूबर 2019, 10:02