Рассмотрим следующий код, который читает массив файлов в последовательном/последовательном порядке. 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!
});
};
Вышеприведенный код работает, но мне не нравится делать рекурсию, чтобы вещи происходили последовательно. Есть ли более простой способ переписать этот код, чтобы мне не приходилось использовать мою readSequential
функцию readSequential
?
Первоначально я пытался использовать Promise.all
, но это привело к одновременному выполнению readFile
вызовов readFile
, а это не то, чего я хочу:
var readFiles = function(files) {
return Promise.all(files.map(function(file) {
return readFile(file);
}));
};