readFiles
返回一个 Promise,该 Promise 只有在顺序读取所有文件后才被解决。var readFile = function(file) {
... // Returns a promise.
};
var readFiles = function(files) {
return new Promise((resolve, reject) => {
var readSequential = function(index) {
if (index >= files.length) {
resolve();
} else {
readFile(files[index]).then(function() {
readSequential(index + 1);
}).catch(reject);
}
};
readSequential(0); // Start with the first file!
});
};
上述代码可以工作,但我不喜欢必须使用递归来使事情按顺序发生。有没有更简单的方法可以重写这个代码,这样我就不用使用奇怪的readSequential
函数了?
最初我尝试使用Promise.all
,但那会导致所有的readFile
调用同时发生,这不是我想要的:
var readFiles = function(files) {
return Promise.all(files.map(function(file) {
return readFile(file);
}));
};
readFileSequential()
已经返回了(因为它是异步的,它会在原始函数调用已经返回很久之后才完成)。 - jfriend00