Javascript 节点js和mongo db错误
我有一个模拟交易的程序,它似乎工作得很好,特别是当我设定了一个止损或获利回吐的时候。但是,当出现多个事件时,它只执行一个。我似乎不明白。我称之为短期利息的抽象也会发生这种情况。当我保存时,Mongo似乎创建了两个实例,这有点问题。我知道代码已经完成了,但我打算让它工作起来,然后开始优化。以下是执行上述抽象的代码:Javascript 节点js和mongo db错误,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我有一个模拟交易的程序,它似乎工作得很好,特别是当我设定了一个止损或获利回吐的时候。但是,当出现多个事件时,它只执行一个。我似乎不明白。我称之为短期利息的抽象也会发生这种情况。当我保存时,Mongo似乎创建了两个实例,这有点问题。我知道代码已经完成了,但我打算让它工作起来,然后开始优化。以下是执行上述抽象的代码: tradeIdIndex = results.history[results.history.length - 1]._id; if(req.body.type
tradeIdIndex = results.history[results.history.length - 1]._id;
if(req.body.typeofTrade == 'short'){
results.shortInterest.push({
time : Date(),
price : req.body.price,
tradeId : tradeIdIndex,
typeofTrade : req.body.typeofTrade,
quantity : req.body.quantity,
userId : req.body.userId
})
results.save();
}
这节省了我希望在满足某些条件后删除的短期利息。如果满足删除短期利息、takeProfit和StopLoss的条件,则调用下面的代码,这实际上只是函数的一个片段。它按照我的预期执行
if(tradeId){
console.log("I am checking the sell and cover to remove the respective open trades");
for(var i = userData.openTrades.length -1; i >= 0; i--){
if(userData.openTrades[i].celebrity == self.req.celebrityName && userData.openTrades[i].typeofTrade == typeofTrade && userData.openTrades[i].tradeId == tradeId){
console.log(userData.openTrades[i]);
userData.openTrades.splice(i, 1);
userData.save();
}
};
}
它将控制权返回给下面的代码,该代码实际调用它以继续执行
case "short" :
checkSellandCover(userData, 'short', self, req.tradeId);
removeStops(self.celebrity, userId, 'cover', req.tradeId);
removeTakeProfits(self.celebrity, userId, 'cover', req.tradeId);
removeShortInterest(self.celebrity, userId, 'short', req.tradeId);
userData.save();
if(self.celebrity.ask > req.shortPrice){
value = parseFloat(self.celebrity.ask) * parseFloat(req.quantity) - parseFloat(req.shortPrice) * parseFloat(req.quantity);
userData.accountValue = parseFloat(userData.accountValue) - value + parseFloat(req.shortPrice) * parseFloat(req.quantity);
userData.save();
} else {
value = 2 * parseFloat(req.shortPrice) * parseFloat(req.quantity) - parseFloat(self.celebrity.ask) * parseFloat(req.quantity);
userData.accountValue = userData.accountValue + value;
userData.save();
}
break;
如上所述,我的问题是:
1) 为什么mongo会保存我的数据两次。
2) 如果我有多个止损或获利回吐,上述代码将无法正确执行。短期利息也是如此,因为它被保存了两次。现在我已经问了这个问题,我开始认为这是因为我正在执行数据库操作,并且在执行results.save()指令时,数据库搜索可能仍然在执行。它保存了两次,因为您编写了
userData.save()代码>两次…谢谢我的坏消息。我把它刮掉了。犯了这么愚蠢的错误。