我想了解您对以下解决方案的看法。在node.js中,我经常看到错误处理方式:
async.each(context.areas, capacityOfArea, function(error) {
if (error) {
next(error);
} else {
next();
}
});
通常可以,但有时它会模糊代码(在我看来),我想简化这个。下面的代码是否相等?
async.each(context.areas, capacityOfArea, function(error) {
next(error||undefined);
});
答案 0 :(得分:2)
是的,它们是一样的。想一想调用者看到了什么 - next()能够区分next()和next(undefined)吗?
但更进一步,所有异步关心的是错误是否真实,它接受undefined或false或null也是成功指标。错误要么是真实的(错误的),要么不是真的。如果不是真的,我们想要调用next(< not truthy>),如果有错误,我们想调用next(error),这会导致
async.each(context.areas, capacityOfArea, function(error) {
next(error);
}
答案 1 :(得分:2)
他们可以相同,具体取决于next
处理其参数的方式。但从技术上讲,它们并不相同。在第一种情况下,您根本没有传递参数,因此在next
内,arguments.length
将为0
。在第二种情况下,您总是传递一个参数,因此arguments.length
将为1
。
再次:两者是否产生相同的行为取决于next
的实施。很可能是的。
编写此代码的最佳方法可能是
async.each(context.areas, capacityOfArea, next);