我有令人困惑的代码,我想模块化。我有一个在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);}
作为acallback
传递,它最终将作为最终回调运行。但是,它说err
acallback(err, transaction)
忍受我,我昨天才发现async
,所以我是一个五岁的比喻。
我的第二个想法是将函数链保存到名为transfer
的数组中,如果我无法使其工作,则将其称为async(transfer,function(err,transaction){if err console.log(err)};
。
修改:我还希望acallback
参数是可选的。
答案 0 :(得分:1)
如果您已定义函数$(function() {
$("#two").hover(function() {
$("#two").css("background-color","blue");
}, function() {
$("#two").css("background-color","");
});
});
,那么您应该只传递它,而不是参数。换句话说,而不是:
acallback
...使用此:
...
}
],
acallback(err, transaction)
);
}
要使...
}
],
acallback
);
}
可选,您可以执行许多操作。有些事情让人想起:
在致电acallback()
之前,请检查是否已定义async.waterfall()
。如果不是,请将其设置为无操作功能。
在致电acallback()
之前,请检查是否已定义async.waterfall()
。如果不是,请在没有它的情况下调用acallback()
。如果是,请用它调用它。