我最近一直在玩NodeJS
而且我发现自己陷入了常规模式问题:
我有一个运行的主要操作,根据一些配置参数,我需要执行一个额外的步骤,但这一步是异步的:
if(request.config.save) {
fs.writeFile(request.config.save, decryptedData, function(err) {
// Continue the operation with a callback...
// Perform some other ops.
if(typeof callback == 'function') callback(decryptedData);
}.bind(this));
} else {
// Continue the same operation without a callback
// Perform some other ops.
if(typeof callback == 'function') callback(decryptedData);
正如您所看到的,此代码不是DRY,因为主要结尾(回调)被调用两次。
我看到的唯一方法就是使用函数(但函数调用再次不是DRY ......代码可能会非常膨胀......
那么有一个很好的忍者技巧来解决这个问题吗?
答案 0 :(得分:3)
嗯,一行代码并不是重复的,但是如果你做的不止于此,它就会变得非常干燥。将最终的逻辑包装到函数中,然后在条件中调用它会怎么样?
var endTick = function(){
if(typeof callback == 'function') callback(decryptedData);
}
if(request.config.save) {
fs.writeFile(request.config.save, decryptedData, function(err) {
// Continue the operation with a callback...
// Perform some other ops.
endTick();
}.bind(this));
} else {
// Continue the same operation without a callback
// Perform some other ops.
endTick();
}
答案 1 :(得分:0)
function cb() {
if (typeof arguments[0] === 'function')
arguments[0].apply(null, Array.prototype.slice.call(arguments,1));
}
不应超过大约10个字符(可能必须bind
),而不是正常的函数调用,不用 typeof
检查,并假设没有{{1它不应该超过4个。
在没有付出某些代价的情况下,没有办法解决这个问题。