首頁  >  文章  >  web前端  >  Promise.all 如何簡化非同步 URL 取得以提高效率?

Promise.all 如何簡化非同步 URL 取得以提高效率?

DDD
DDD原創
2024-10-28 04:36:30338瀏覽

How can Promise.all Streamline Asynchronous URL Fetching for Enhanced Efficiency?

非同步 URL 取得:利用 Promise.all 提高效率

Promise.all 實用程式是並發執行序列的關鍵手段。開始取得 URL 陣列的任務時,我們的目標是獲得封裝對應文字內容的類似陣列。在深入研究這項努力之前,有必要對某些嘗試方法的缺點進行反思。

下面的程式碼片段在嘗試實現我們的目標時,未能達到目標:

var promises = urls.map(url => fetch(url));
var texts = [];
Promise.all(promises)
  .then(results => {
     results.forEach(result => result.text()).then(t => texts.push(t))
  })

首先,這個實現在概念上是有缺陷的,因為forEach 函數既不返回數組也不傳回承諾,使其無效。其次,程式碼缺乏必要的嵌套來適當處理文本提取的非同步性質。

要修正這些缺點,需要採取多方面的方法。我們首先在 URL 陣列上呼叫 Promise.all,檢索代表各個獲取操作的 Promise 陣列。成功完成這些初始提取後,將使用第二次 Promise.all 呼叫從回應主體中擷取文字內容。然後將封裝的文字值聚合到一個內聚數組中。以下程式碼優雅地捕捉了這種方法的本質:

Promise.all(urls.map(u => fetch(u))).then(responses =>
    Promise.all(responses.map(res => res.text()))
).then(texts => {
    // Proceed with texts array...
})

此策略的簡化變體涉及在初始獲取承諾履行期間直接提取回應正文:

Promise.all(urls.map(url =>
    fetch(url).then(resp => resp.text())
)).then(texts => {
    // Proceed with texts array...
})

或者更簡潔地使用await:

const texts = await Promise.all(urls.map(async url => {
  const resp = await fetch(url);
  return resp.text();
}));

以上是Promise.all 如何簡化非同步 URL 取得以提高效率?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn