考慮以下場景:您有一個URL 數組,並希望獲取一個包含以下數組的對象:這些URL 處的文件中的相應文字。 Promise.all 函數提供了一種處理此任務的便捷方法。
最初,您嘗試使用 Promise.all 來檢索每個 URL 的承諾。但是,隨後對 results.forEach 的呼叫可能會導致混亂。此函數會觸發每個元素的回調,從而產生一個未定義值的陣列。
正確的方法是使用 Promise.all 兩次。第一個實例從 URL 中取得回應,而第二個實例將回應轉換為文字並傳回這些文字的陣列。
Promise.all(urls.map(u=>fetch(u))).then(responses => Promise.all(responses.map(res => res.text())) ).then(texts => { … })
或者,您可以透過直接從回應中取得文字來簡化程式碼:
Promise.all(urls.map(url => fetch(url).then(resp => resp.text()) )).then(texts => { … })
使用async/await 語法,程式碼變得更加簡潔:
const texts = await Promise.all(urls.map(async url => { const resp = await fetch(url); return resp.text(); }));
透過使用這種方法,你可以有效地取得URL 陣列並獲得一個物件對應的文字值。
以上是如何使用 Promise.all 有效率地從 URL 陣列中檢索文字?的詳細內容。更多資訊請關注PHP中文網其他相關文章!