Доброго времени суток, в общем, я самоучка, делаю телеграм-бота на Node.JS.
Реализую возможность оформления заказа, но в процессе появилась проблема, которую не пойму как решить.
Нужно присвоить переменной «1» значение переменной «2». В итоге получается, что ничего не меняется, а значение переменной «2» меняется на переменную «1», то есть все происходит наоборот.
Я не знаю, как это понятно объяснить, так что вот как я делал:
Есть объект с «сессиями», при отправлении пользователем сообщения, происходит следующее:
session[ID] = session[ID] || {
log: [PathTmpl.main_menu],
inline_log: '',
name: ctx.from.first_name,
last_name: ctx.from.last_name,
auth: 'new',
admin: false,
orders: [],
phone: '',
delivery: emptyAdress,
order: emptyOrder
}
Стоит обратить внимание на переменные
order и
orders.
Объект
emptyOrder является константой, с ключами и пустыми значениями
const emptyOrder = {
id: 0,
name: '',
pack: '',
code: '',
amount: '',
price: ''
}
Orders является массивом, в него добавляются выбранные товары из объекта
order.
По мере выбора товара, в
order добавляются данные:
session[ID].order.code = code
…
session[ID].order.name = infoTxt.name
…
session[ID].order.pack = infoTxt.packing
…
session[ID].order.price = infoTxt.cost
…
session[ID].order.amount= amountNum
После этого
order пушиться в массив
orders и очищается с сохранением ключей:
session[id].orders.push(session[id].order)
session[id].order = emptyOrder
Вроде все логично, но стоит посмотреть, что находится в переменных СРАЗУ после этих строк
Вывожу в консоль
console.log('\n session[id].orders : \n', session[id].orders) // массив
console.log('\n session[id].order : \n', session[id].order) // объект
console.log('\n emptyOrder : \n', emptyOrder) // константа
Уже можно заметить, что переменная
emptyOrder заменилась на значение
order, но такого не должно происходить. А сама
order не очистилась…
А вот что произойдет, если добавить еще один товар:
То есть оно не добавляет новы товар в массив, а заменяет все элементы на последний выбранный товар.
Не пойму с чем это связано и как это решить.
Такая же ситуация с информацией о доставке. Заметил что после того, как один пользователь ввел адрес доставки, он добавляется в константу
emptyAdress, и после этого следующему пользователю выводится информация с этого же
emptyAdress, то есть он видит данные другого пользователя!
Интересно, кто сталкивался с подобным, какие есть варианты решения?)