我正在尝试计算并返回一个newQty
来传递它以便在DB中进行更新。看起来我正在获得NaN
fornewQty
。让我知道我到底做错了什么。在这里你可以找到console.log:
console.log('order type:' + orderType)
order类型:卖console.log('new qty:' + qty)
新数量:300console.log('old qty:' + typeof oldQty)
旧数量:对象console.log('old qty:' + oldQty.toString())
old qty:{qtyPorfolio:500}console.log('new qty after minus:' + qty)
new数量:-300JavaScript的
const fetchQtyPortfolio = async (arg) => {
try {
const query = { symbol: arg.symbol }
const projection = { _id: 0 }
const orderType = arg.orderType
console.log('order type:' + orderType)// Sell
let qty = arg.qty
console.log('new qty:' + qty)// 300
let oldQty = await Portfolio.find(query, projection).select("qtyPorfolio")
console.log('old qty:' + typeof oldQty)// object
console.log('old qty:' + oldQty.toString()) // {qtyPorfolio: 500}
console.log('old qty:' + JSON.stringify(oldQty))//old qty:[{"qtyPorfolio":500}]
if (isEmpty(oldQty)) {// false
// Object is empty (Would return true in this example)
console.log('new qty:' + qty)
return qty
} else {
// Object is NOT empty
if (orderType === 'Sell') qty = Math.abs(qty) * -1
console.log('new qty after minus:' + qty)// -300
const { qtyPorfolio } = oldQty//???
console.log('qtyPorfolio :' + qtyPorfolio)// undefined
console.log('qtyPorfolio :' + typeof qtyPorfolio)// undefined
return newQty = qtyPorfolio + qty// ???
}
} catch (ex) {
console.log(`fetchQtyPortfolio error: ${ex}`)
}
}
调节器
exports.postAddTransaction = async (req, res) => {
const arg = req.body
const qtyPorfolio = await portfolio.fetchNewQtyPortfolio(arg)
console.log('quantity portfolio ' + qtyPorfolio)//quantity portfolio NaN
res.render('buysell')
}
根据@Amir Wagner的解决方案我改变了将返回对象数组的find()改为只返回一个对象的findOne()
const fetchQtyPortfolio = async (arg) => {
try {
const orderType = arg.orderType
let qty = parseInt(arg.qty)
const query = { symbol: arg.symbol }
const projection = { _id: 0 }
const oldQty = await Portfolio.findOne(query, projection).select("qtyPorfolio")
//findOne returns the Object{} without the Array
console.log('old qty:' + typeof oldQty)
console.log('old qty:' + JSON.stringify(oldQty))
if (isEmpty(oldQty)) {
// Object is empty (Would return true in this example)
return qty
} else {
// Object is NOT empty
if (orderType === 'Sell') qty = Math.abs(qty) * -1
const { qtyPorfolio } = oldQty
return newQty = qtyPorfolio + qty
}
} catch (ex) {
console.log(`fetchQtyPortfolio error: ${ex}`)
}
}
由于oldQty包含[{"qtyPorfolio":500}]
,一个数组,您只需要访问它:
const qtyPorfolio = oldQty[0].qtyPorfolio;
如果你想使用array destructuring(我不愿意)它将是:
const [firstResult] = oldQty
return newQty = firstResult.qtyPorfolio + qty
这就是问题
const { qtyPorfolio } = oldQty
简单地做
qtyPorfolio = oldQty[0].qtyPorfolio;
解构不是那样的。您可以从类似的对象中获取属性,但不能从数组中获取属性。显然,你的oldQty是一个包含一个对象的数组。