【问题标题】:Call method inside that method in JavaScript在 JavaScript 中调用该方法内的方法
【发布时间】:2021-02-08 21:35:03
【问题描述】:

考虑一下:

class ConnectUser {
    connect = () => {
        axios.get('URL').catch(err => {
            // CAN I CALL `connect` METHOD AGAIN?!
            // this.connect();
        });
    }
}

我的代码有一个方法,可以连接或拒绝连接某些资源。如果发生异常,我可以再次调用它来争取连接吗?

【问题讨论】:

  • @David784 实际上恰恰相反。箭头函数将始终将实例作为this 值,而普通方法(应该写为connect() {…},而不是connect = function() {…})只有在实例上调用时才具有正确的this
  • 不要忘记return 来自catch 回调的递归调用结果,以正确使用承诺链!并且始终将您的尝试限制为最大重试次数,并添加指数退避。
  • @David784 你错了,大卫。正如 Bergi 所说,箭头函数总是有实例。

标签: javascript node.js ecma


【解决方案1】:

是的,你可以。但是,如果这是您想在您的应用程序上推广的内容,请考虑使用 axios plugin that automatically retries,并且仅在您指定的重试次数后才会失败。 如果您将其定义为范围上的单独函数而不是类方法,则可以再次调用 connect 函数。但是,如果你真的需要使用 this 调用,请在外部闭包中保存正确的 this 引用,如下所示:

connect = () => {
      const self = this 
        axios.get('URL').catch(err => {
            self.connect();
        });
    } 

然后用 self 代替

【讨论】:

    【解决方案2】:

    作为 Danielo 答案的替代方案 - 如果您希望 this 内部 connect 引用类实例,您可以简单地将 connect 定义为类的方法,即

    class ConnectUser {
        connect() {
            axios.get('URL').catch(err => {
                return this.connect();
            });
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-12-18
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      • 2021-03-29
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      • 2022-11-21
      相关资源
      最近更新 更多