@ber_enot
Веб-разработчик, Vue.js / Node.js

Как одновременно изменить один и тот же массив в Node.js?

Проблема с одновременными запросами.
Имеется сервер на ноде, в качества транспорта используются вебсокеты.

Есть такой код:
let product = this.products.find(item => item.code == data.code);
    if (product) {
      product.count = data.count;
    } else {
      await this.pushProduct(data.code, data.count);
    }


В pushProduct выполняется запрос к бд, функция async, запрос через await. Что-то типа такого (вырезаны обработчики ошибок):
const res = await models.product.getByCode(code);
res.count = count;
this.products.push(res);


Логика состоит в том, чтобы массив this.products содержал элементы с уникальным ключом code, т.е. они не должны дублироваться. Если есть элемент с данным кодом, то просто изменить его количество.

Так вот, если пульнуть сразу 5 запросов подряд, то добавятся 5 одинаковых элементов. Если эти запросы выполнять с интервалом в секунду - один элемент.
Как такую проблему решить/что читать? Спасибо!
  • Вопрос задан
  • 183 просмотра
Решения вопроса 1
@ber_enot Автор вопроса
Веб-разработчик, Vue.js / Node.js
Решил проблему с помощью библиотеки async-lock.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@StockholmSyndrome
если уже существует элемент с таким code, то просто не добавлять его
if (!this.products.find((item) => res.code === item.code)) {
  this.products.push(res);
}


либо я не понял вопроса
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы