#javascript #for-loop #asynchronous #kue
#javascript #for-цикл #асинхронный #kue
Вопрос:
Я пытаюсь создать несколько заданий в forEach
цикле с kue
помощью, в моем forEach
я возвращаю новое обещание для каждого созданного задания. Каждое задание имеет один и тот же ключ, но другой адрес электронной почты data
. Однако kue
создает все задания с последним адресом электронной почты в списке. Кажется, я не могу понять, как предотвратить эту проблему. Вот некоторый код:
const emails = ['abc@test.com', 'def@test.com', 'efg@test.com'];
emails.forEach(email => {
const extendedData = _.assign(data, { email });
return new Promise((resolve, reject) => {
queue
.create('notifyUsers', extendedData)
.removeOnComplete(true)
.save((err) => {
if (err !== null) {
reject(err);
return;
}
resolve();
});
});
});
создаются 3 очереди для 'efg@test.com'
. Как я могу заставить его создавать очередь для каждого сообщения электронной почты?
Спасибо.
Комментарии:
1.
const extendedData = _.assign(data, { email });
может быть проблема. Похоже, вы мутируетеdata
на каждой итерации. Вероятно, вместо этого вы захотите создать копию объекта:const extendedData = _.assign({}, data, { email });
(если это работает).2. Я полностью пропустил эту часть, спасибо, что указали на это. Теперь все работает нормально 🙂