Witajcie, jesttem w miare nowy w nodejs ale pewna przypadlosc nodejs mnie przerazila....
jest sobie taki kod:
getOrdersToDo(newOrders)
{
let ordersToDoArr = [];
this.activeOrders.map((activeOrderChain, activeIndex) => {
let isInNewOrders = false;
newOrders.map((newChain, newIndex) =>{
if(activeOrderChain.makerId === newChain.makerId)
{
isInNewOrders = true;
let slicedNewChain = newOrders.splice(newIndex, 1)[0];
if(activeOrderChain.getMakerStep().price !== newChain.getMakerStep().price)
ordersToDoArr.push(this.getUpdatedOrder(activeIndex, slicedNewChain));
}
})
.........
getUpdatedOrder(activeIndex, newChain)//activeChain, newChain)
{
let activeChain = self.activeOrders[activeIndex];
let newMakerStep = newChain.getMakerStep();
newMakerStep.orderId = activeChain.getMakerStep().orderId;
newMakerStep.status = "toChange";
newMakerStep.callback = this.updateOrderIdCallback;
newMakerStep.gamePrice += this.addFragmentPrice(newMakerStep.type, newMakerStep.price);
self.activeOrders[activeIndex] = newChain;
return activeChain.getMakerStep();
}
Dziala poprawnie. Jesli natomiast metode getUpdatedOrder zmodyfikuje w ten sposob:
getUpdatedOrder(activeIndex, newChain)//activeChain, newChain)
{
let activeChain = self.activeOrders[activeIndex];
let newMakerStep = newChain.getMakerStep();
newMakerStep.orderId = activeChain.getMakerStep().orderId;
newMakerStep.status = "toChange";
newMakerStep.callback = this.updateOrderIdCallback;
newMakerStep.gamePrice += this.addFragmentPrice(newMakerStep.type, newMakerStep.price);
activeChain = newChain; // **<<<---- !!!!!!!!!!!!**
return activeChain.getMakerStep();
}
To teraz jesli sie tam zdebuguje i sprawdze self.activeOrders, to wychodzi ze polecenie activeChain = newChain; nie wplywa na obiekt w tablicy tylko tak jakby polecenie let activeChain = self.activeOrders[activeIndex]; tworzylo NOWY obiekt a nie tylko powiazanie do juz istniejacego.... Innymi slowy activeChain to newChain ale w self.activeOrders[jakisIndexobiektuActiveChain] jest dalej stary chain bez zmian WTF??!!