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

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

Barbara Streisand
Barbara Streisandオリジナル
2024-12-15 07:37:09674ブラウズ

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。