2014-12-04 66 views
0

我想知道您对以下解决方案的看法。在node.js中我经常看到错误处理是这样的:JavaScript:处理未定义的参数 - 这些解决方案是否相同?

 async.each(context.areas, capacityOfArea, function(error) { 
      if (error) { 
       next(error); 
      } else { 
       next(); 
      } 
     }); 

这往往是美好的,但有时它掩盖了代码(在我看来),我想对此进行简化。下面的代码是否相等?

 async.each(context.areas, capacityOfArea, function(error) { 
      next(error||undefined); 
     }); 
+4

如果没有'error'不之成为反正'undefined',使得查了一下毫无意义的最佳方式?简单地使用'next(error)'看起来好像会达到同样的最终结果。 – 2014-12-04 01:03:34

+0

绝对正确。我没有注意到这一点。必须保留一些代码。 – Rympau 2014-12-04 01:23:46

回答

2

是的,它们是相同的。想想调用者看到什么 - next()能够区分next()和next(undefined)吗?

但是更进一步,所有的异步关注是错误是否真实,它接受未定义或错误或null作为成功指标。错误将是真理(错误),或者不真实。如果没有truthy,我们下一步(<不truthy >)来调用,如果错误,我们要调用next(错误),这将导致

async.each(context.areas, capacityOfArea, function(error) { 
    next(error); 
} 
2

他们可能是相同的,这取决于如何next正在处理其参数。但从技术上讲它们并不相同。在第一种情况下,您根本没有通过任何参数,因此在next,arguments.length内将为0。在第二种情况下,你总是传递一个参数,所以arguments.length将是1

还是那句话:两者是否产生同样的行为取决于next实施。很可能是的。

大概写这个代码将是

async.each(context.areas, capacityOfArea, next); 
相关问题