一个接一个地解决承诺(即按顺序)?
2022-08-29 23:31:12
请考虑以下代码,它以串行/顺序方式读取文件数组。 返回一个 promise,只有在按顺序读取所有文件后,才会解析该 promise。readFiles
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);
}));
};