无法在Typescript中的函数内调用函数

时间:2019-07-14 15:01:30

标签: javascript angular typescript undefined

基本上我是一个Angular Web页面,它通过NodeJS应用接收的POST将文件上传到服务器。

当我尝试通过subirArchivo()接收文件路径并通过称为InsertaPersonas()的函数发送文件路径时,出现了我的问题。我尝试了几种方法,但始终会导致函数被定义为未定义,甚至不会一次输入该函数。

这是我的代码:

     subirArchivo(req: Request, res: Response) {
    var form = new IncomingForm();
    let readStream;
    var self = this;
    this.insertaPersonas('a'); // function undefined

    form.parse(req);
    form.on('file', (field: any, file: any) => {
      // Do something with the file
      // e.g. save it to the database
      // you can access it using file.path
      console.log('file', file.name); //this works
      readStream = fs.createReadStream(file.path); // this works
      // console.log(file.path); //this works
      self.insertaPersonas(file.path); //function undefined
    });
    form.on('end', () => {
      res.json();
    });
  }


这是我全班的课程:https://pastebin.com/b8a2E3EZ

2 个答案:

答案 0 :(得分:2)

这似乎是一个典型的绑定问题;

class MyClass {
  other () {
    console.log('enter')
  }
  fn () {
    this.other()
  }
}

const instance = Class()
instance.fn() // works

Promise.resolve()
  .then(instance.fn.bind(instance)) // works

Promise.resolve()
  .then(instance.fn) // fails: this.other is undefined, not a function

您可以尝试从调用subirArchivo的函数中查找,并确保像myInstance.subirArchivo()那样调用它,或者先绑定实例(在引用它的地方myInstance.subirArchivo.bind(myInstance)或在构造函数中:

class UploadController {

  constructor () {
    this.subirArchivo = this.subirArchivo.bind(this)
  }

  insertaPersonas (...) { ... }
  subirArchivo () { ... this.insertaPersonas(...) ... }

}

有关更多信息,请参见Use of the JavaScript 'bind' method

答案 1 :(得分:1)

您的问题可能是self参考。箭头功能也不需要self=this

谁在呼叫subirArchivo

我猜想该范围内的self不是您的uploadController类。