ホームページ > ウェブフロントエンド > jsチュートリアル > Promise.all を使用して複数の URL から効率的にデータを取得するにはどうすればよいですか?

Promise.all を使用して複数の URL から効率的にデータを取得するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-10-29 05:24:02
オリジナル
243 人が閲覧しました

How to Efficiently Fetch Data from Multiple URLs with Promise.all?

Promise.all で複数の URL フェッチを克服する

非同期プログラミングの分野では、Promise はフェッチなどの非同期タスクを処理する強力なメカニズムを提供します。複数の URL からのデータ。あなたが遭遇したように、このユースケースを Promise.all パラダイムに当てはめようとすると、障害になる可能性があります。

試みた解決策を分析してみましょう:

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 は配列も Promise も返さないため、フェッチされたテキストにアクセスする方法がない Promise-void 状態になります。

これを修正するには、Promise.all を 2 回使用し、1 回目はテキストをフェッチする必要があります。 URL を取得し、応答からテキストを 1 回抽出します:

Promise.all(urls.map(u=>fetch(u))).then(responses =>
    Promise.all(responses.map(res => res.text()))
).then(texts => {
    …
})
ログイン後にコピー

または、フェッチとテキスト取得を 1 つのステップに組み合わせてプロセスを効率化できます:

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート