ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript で Promise を順番に解決するにはどうすればよいですか?
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 サイトの他の関連記事を参照してください。