说我有这个
if ( ! chargeCreditCard() ) {
// my custom error message here.
// would like to display 'err' from
// chargeCreditCard
render("Could not charge cc")
} else {
render("thanks! will ship soon")
}
chargeCreditCard() {
Library.charge(cc_info, function(err, success) {
if (err)
return false
return true
}
}
如果我想展示"错误"通常会做什么?来自chargeCreditCard()
声明中的if
?
由于chargeCreditCard
返回true
或false
,我只是向服务器呈现一个基本的"无法收取cc"。
应该从return err
内部进行chargeCreditCard
然后执行
var result = chargeCreditCard
if ( result !== true) {
render(result)
} else {
render('thanks! will ship soon')
}
不是编码问题,而是我想的数据流问题。
答案 0 :(得分:0)
在这种情况下更有意义的选项是返回Promise
。 Promise是封装可能成功或不成功的异步操作的完美工具:
chargeCreditCard()
.then(_ => render("thanks! will ship soon"))
.catch(err => render(`Could not charge cc. Reason: ${err}`));
chargeCreditCard() {
return new Promise((resolve, reject) =>
Library.charge(cc_info, err => err ? reject(err) : resolve())
);
}
回调传递往往会使代码变得复杂,甚至在开始链接和嵌套时也会更多。遗憾的是,promises是一个相对较新的工具,绝大多数NodeJS / Javascript开源代码都严重依赖于回调传递。
答案 1 :(得分:0)
我会选择这样的事情:
function chargeCreditCard(callback) {
Library.charge(cc_info, callback);
}
chargeCreditCard(function(err, success) {
if (success) {
render("thanks! will ship soon");
} else {
var errorMsg = "Could not charge cc.";
if (err)
errorMsg += " Error: " + err;
render(errorMsg);
}
});