JavaScript:将undefined作为参数处理 - 这些解决方案是否相同?

时间:2014-12-04 00:53:48

标签: javascript node.js function parameters undefined

我想了解您对以下解决方案的看法。在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);
        });

2 个答案:

答案 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);