Самое лучшее решение, которое я смог выяснить, было с обещаниями bluebird. Вы можете просто сделать Promise.resolve(files).each(fs.readFileAsync);, который гарантирует, что обещания разрешаются последовательно в порядке.
bluebird
Promise.resolve(files).each(fs.readFileAsync);