2017年更新 :如果环境支持,我将使用异步功能:
async function readFiles(files) { for(const file of files) { await readFile(file); }};如果需要,可以使用异步生成器(如果您的环境支持)将读取文件的时间推迟到需要它们之前:
async function* readFiles(files) { for(const file of files) { yield await readFile(file); }};更新:再次考虑-我可能改用for循环:
var readFiles = function(files) { var p = Promise.resolve(); // Q() in q files.forEach(file => p = p.then(() => readFile(file)); ); return p;};或更紧凑,减少:
var readFiles = function(files) { return files.reduce((p, file) => { return p.then(() => readFile(file)); }, Promise.resolve()); // initial};在其他Promise库(如when和Bluebird)中,您可以使用此方法。
例如,蓝鸟将是:
var Promise = require("bluebird");var fs = Promise.promisifyAll(require("fs"));var readAll = Promise.resolve(files).map(fs.readFileAsync,{concurrency: 1 });// if the order matters, you can use Promise.each instead and omit concurrency paramreadAll.then(function(allFileContents){ // do stuff to read files.});尽管今天确实没有理由 不 使用异步等待。



