Рассмотрим следующий код, который читает массив файлов в последовательном/последовательном порядке. 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);
}));
};