eslint,async - 警告重复的姓名帖子

时间:2017-04-05 10:46:20

标签: javascript eslint create-react-app

我使用create-react-app提升了我的项目,然后在上面添加了MobX。

我的mobX商店中有以下代码:

async post(url, payload, doThrow = false, actionDescription = '') {
    try {
        this.isLoading = true
        const {data} = await this.httpClient.post(url, payload)
        return data
    } catch (e) {
        if (doThrow) throw e
    } finally {
        this.isLoading = false
    }
}

async post(url, payload, doThrow = false) {
    try {
        this.isLoading = true
        const {data} = await this.httpClient.post(url, payload)
        return data
    } catch (e) {
        if (doThrow) throw e
    } finally {
        this.isLoading = false
    }
}

我的linter返回以下错误:

  

146:3警告重复名称'post'no-dupe-class-members

为什么eslint将post视为变量而不是函数?

1 个答案:

答案 0 :(得分:1)

您已定义了两个具有相同名称的功能。你可能已经用其他语言编写了这些函数,但Javascript并没有这样做。

两个函数在js中是相同的,你可以将一个你想要的参数发送到一个方法。所以,基本上,你可以使用或不使用actionDescription来调用post,但是它仍然会在不调用第一个函数的情况下执行第二个函数。这是因为,类函数附加到类的原型,因此post()的第二个声明将替换第一个。

示例 -

add(a, b, c, d) {
// Do something
}

可以按如下方式调用 -

add(1)add(1, undefined, 2) or add(undefined,undefined,undefined,4)`

甚至更好 -

add() {
var sum;
    for(var i=0; i < arguments.length; i++) {
        sum += arguments[i];
    }
    return sum;
}
可以使用任意数量的参数调用

以获得预期结果。

如果你想用不同的功能实现不同的东西,那么你应该重命名其中一个功能。