Как вы сказали, нужно выполнить асинхронную операцию в синхронном цикле. Для этого вы можете использовать асинхронную библиотеку. Это так полезно в таких оператино.
Просто сначала установите асинхронный модуль в ваш проект
npm install --save async
После этого вы можете сделать что-то вроде этого:
// for use with Node-style callbacks...
var async = require("async");
var obj = {dev: "/dev.json", test: "/test.json", prod: "/prod.json"};
var configs = {};
async.forEachOf(obj, (value, key, callback) => {
fs.readFile(__dirname + value, "utf8", (err, data) => {
if (err) return callback(err);
try {
configs[key] = JSON.parse(data);
} catch (e) {
return callback(e);
}
callback();
});
}, err => {
if (err) console.error(err.message);
// configs is now a map of JSON data
doSomethingWith(configs);
});
Для работы с этой библиотекой она использует функцию async.forEachOf
вместо простого цикла forEach. Три параметра отправляются в эту функцию.
- Первый параметр, который передается в async.forEachOf - это массив для его итерации (obj).
- 2-й параметр - это функция обратного вызова, которая применяется к каждому элементу в объекте.
- Третий или последний параметр, который передается функции async.forEachOf, также является другой функцией обратного вызова. Вызывается, когда процесс итерации по каждому элементу в obj завершен.