ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript で Promise を順番に解決するにはどうすればよいですか?

JavaScript で Promise を順番に解決するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-15 07:37:09
オリジナル
672 人が閲覧しました

How Can I Resolve Promises Sequentially in JavaScript?

Promise を順番に解決する

この記事では、Promise を順番に解決するという問題に対処する方法を検討します。

提供されたコード スニペットは、再帰を使用してファイルの配列をシリアルに読み取り、すべてのファイルが読み取られた後にのみ Promise を解決します。このアプローチは機能しますが、不必要な再帰が発生します。

より簡単な代替方法は、for ループまたは Reduce を利用して Promise 解決を連鎖させることです:

var readFiles = function(files) {
  var p = Promise.resolve(); // Q() in q

  files.forEach(file =>
      p = p.then(() => readFile(file)) 
  );
  return p;
};
ログイン後にコピー

Reduce を使用:

var readFiles = function(files) {
  return files.reduce((p, file) => {
     return p.then(() => readFile(file));
  }, Promise.resolve()); // initial
};
ログイン後にコピー

Promise ライブラリは、同時実行性を備えた Bluebird の map() など、逐次解決のためのユーティリティ メソッドを提供することがよくあります。 1:

var Promise = require("bluebird");
var fs = Promise.promisifyAll(require("fs"));

var readAll = Promise.resolve(files).map(fs.readFileAsync,{concurrency: 1 });
ログイン後にコピー

最新の JavaScript では、非同期関数を連続的な Promise に使用することもできます:

async function readFiles(files) {
  for(const file of files) {
    await readFile(file);
  }
};
ログイン後にコピー

以上がJavaScript で Promise を順番に解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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