我想模块化的代码令人困惑。我有一个在 Mongodb 中实现的总账。将学分从 转移john
到 在 中adam
附加以下文件db.dummyTx
:
{
"debitAccount": "john",
"creditAccount": "adam",
"amount": 10
}
我想创建一个transfer(from, to, amount, callback())
回调接收transaction
文档/对象的函数。
我使用该async
模块创建了以下内容:
function transfer(from, to, amount, acallback) {
async.waterfall([
function(callback) {
userBalance(from);
userBalance(to);
callback(null);
},
function(callback) {
var transaction = new dummyTx();
transaction.creditAccount = from; // in the account of the sender
transaction.debitAccount = to; // with reference to the reciever
transaction.amount = amount; // of the given amount
transaction.save(function(err) {
callback(null, transaction);
});
},
function(transaction, callback) {
console.log("Credited User " + transaction.creditAccount +
" and debited User " + transaction.debitAccount + " by amount " +
transaction.amount + "credits");
callback(null, transaction);
},
function(transaction, callback) {
userBalance(transaction.creditAccount);
userBalance(transaction.debitAccount);
callback(null, transaction);
}
],
acallback(err, transaction)
);
}
我的理由是,如果我通过function(err,transaction){if err console.log(err);}
as acallback
,它最终将作为最终回调运行。但是,它说err
未定义acallback(err, transaction)
忍受我,我async
昨天才发现,所以我是一个比喻五岁的孩子。
我的第二个想法是将函数链保存到一个名为的数组transfer
中并调用它,就async(transfer,function(err,transaction){if err console.log(err)};
好像我无法让它工作一样。
编辑:我也希望acallback
参数是可选的。