Я модернизирую некоторый код. Он имеет кусок для загрузки базы данных, реализованный как:
var customerQueue = async.queue(insertCustomer, DATABASE_PARALLELISM);
customerQueue.drain = function() {
logger.info('all customers loaded');
airportCodeMappingQueue.push(airportCodeMappings);
}
Функция insertCustomer
используется для написания с обратными вызовами. Я изменил его на async
/ await
, как часть модернизации кода.
Теперь, подумайте, что я написал эквивалент async.queue как:
let customerQueueElements = [];
var customerQueue = {};
customerQueue.push = (customers) => {
customers.forEach(customer => {
customerQueueElements.push(insertCustomer(customer))
});
}
const processQueue = async (queue, parallelism) => {
for (let i = 0; i < queue.length; i += parallelism) {
for (let j = 0; j < parallelism; j++) {
let q = []
if (queue[i + j]) {
q.push(queue[i + j])
}
await Promise.all(q)
}
}
}
Теперь я могу сделать await ProcessQueue(customerQueue, DATABASE_PARALLELISM)
, но синтаксис плохой, и я сохраняю видимую именованную переменную для каждой очереди.
Что было бы хорошим способом справиться с этим?
Кроме того, drain()
должен быть подключен к then
, верно?