Создание нескольких заданий в цикле forEach с помощью Kue

#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. Я полностью пропустил эту часть, спасибо, что указали на это. Теперь все работает нормально 🙂