这是我的功能:
/* function for add transaction */
function addtransaction(user_id,status,amount,date,description){
var saved = "";
function getLastId(){
Transactions.findOne({}, {}, { sort: { '_id' : -1 } }).lean().exec(function(err, lastTrans) {
if (err) {
return 1;
}else{
return parseInt(lastTrans.id) + 1;
}
});
}
var newId = getLastId();
var newTransactions = new Transactions({
id : newId,
user_id : user_id ,
status : status ,
amount : amount ,
date : date ,
description : description
});
if (newTransactions.save()){
return true;
}else{
return false;
}
}/* end function */
这是我的控制台错误:
你能帮我解决这个错误吗? enter image description here
我更新了我的功能,但仍然有错误!
答案 0 :(得分:0)
似乎错误在这里getLastId + 1
。getLastId
是一个函数,1
是一个数字,函数不能转换为数字。很可能你忘了把括号放在函数调用之外。
尝试使用getLastId + 1
getLastId() + 1
答案 1 :(得分:0)
您可能错过了以下的():
id: getLastId + 1
答案 2 :(得分:0)
您的问题是,您不是在等待getLastId()
实际返回,因为它是异步的。由于它是异步的,而getLastId()
仍然有效,因此您的代码已经开始创建新的Transaction
,其中newId
为undefined
,因为没有返回任何内容。因此,您需要将依赖于newId
的代码放入Transaction.findOne()
的回调中,或者将回调传递给getLastId()
。
请注意,您的addtransaction
函数也应该采用回调函数,因此您可以以异步方式将newTransactions.save()
的结果返回给被调用者。我没有在下面的代码示例中执行此操作,因为我不知道您的其他代码是如何构建的。
我还会说下面的方法#1是更好的方法,因为它的代码较少,每次getLastId()
被调用时都不涉及定义addtransaction()
,并且它的回调少于方法#2。
Transactions.findOne()
function addtransaction(user_id, status, amount, date, description) {
Transactions.findOne({}, {}, { sort: { '_id' : -1 } }).lean().exec(function(err, lastTrans) {
var newId = err ? 1 : (parseInt(lastTrans.id) + 1);
var newTransactions = new Transactions({
id : newId,
user_id : user_id ,
status : status ,
amount : amount ,
date : date ,
description : description
});
return newTransactions.save();
});
}
/* function for add transaction */
function addtransaction(user_id,status,amount,date,description){
var saved = "";
function getLastId(callback){
Transactions.findOne({}, {}, { sort: { '_id' : -1 } }).lean().exec(function(err, lastTrans) {
if (err) {
return callback(null, 1);
} else {
return callback(null, parseInt(lastTrans.id) + 1);
}
});
}
getLastId((err, newId) => {
var newTransactions = new Transactions({
id : newId,
user_id : user_id ,
status : status ,
amount : amount ,
date : date ,
description : description
});
return newTransactions.save();
});
}/* end function */
还值得注意的是,直接从异步函数分配返回数据不是在Node.js中构造异步函数的正确方法。 See this answer用于构造这些类型函数的正确方法。