【问题标题】:Calling class function from callback function calls in nodejs [duplicate]从nodejs中的回调函数调用调用类函数[重复]
【发布时间】:2018-05-03 07:23:16
【问题描述】:

我有这种情况

class A {
  a(params) {
    //some code here
  }

  b(params) {
    //some code here
  }

  c(params) {
    this.a(function(data) {
      console.log(this);    // undefined
      this.b();             // error no function b of undefined
    }) 
  }
}

我尝试使用bind(this) 将其绑定到“a”,但它显示无法读取未定义的属性“绑定”或未定义。当我打印这个时,我得到了 A 类。我想在“a”函数中调用它。

【问题讨论】:

    标签: javascript node.js function oop


    【解决方案1】:

    当您定义了一个新的function 时,this 的含义在其中发生了变化。您要么需要使用箭头功能:

    this.a((data) => {
      console.log(this); // class A
      this.b();
    })
    

    或将this的引用保存在局部变量中:

    var self = this;
    
    this.a(function(data){
      console.log(self); // class A
      self.b();
    })
    

    【讨论】:

    • 您也可以使用bindfunction 上设置this 的值。
    • 如果OP是作者,我宁愿建议简化代码。
    • 很好的答案。箭头函数是最好的方法。 self 的版本是 2015 之前的版本,但如果您想查看像 Babel 这样的转译器的输出,您会看到它。我不明白关于在内部函数中使用 bind...、@sjahan 的评论,您已经丢失了对 A 对象的 this 引用。你打算如何取回它?
    • @RayToal 这个工作对吗? this.a((function(data) { console.log(this); this.b(); }).bind(this)); 从语法上讲,这不是最酷的方式,但知道你能做到这一点的每一种方式总是很好的!另外,请注意,有时,您不能使用箭头函数代替函数,例如在箭头函数中,无法访问arguments
    • 啊,是的,非常好! bind 在外面!我没看到。 :)
    【解决方案2】:

    不确定您期望在什么时候执行“b”方法。我在这里添加了 jsFiddle:https://jsfiddle.net/k3jkobae/ 并且在我包装我的时候看到有简短的正确答案:) 箭头函数最适合。

    class A {
        a( callback ){
            console.log('a');
            callback();
        }
    
        b(params){
             console.log('b');
         }
    
        c(params) {
           this.a( () => this.b() ); 
        }
    }
    
    const myClass = new A();
    myClass.c();
    

    【讨论】:

      猜你喜欢
      • 2013-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-04
      • 2021-09-26
      • 2010-11-21
      • 1970-01-01
      • 2013-05-28
      相关资源
      最近更新 更多