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