Вызов внутренней функции Typescript не работает - PullRequest
1 голос
/ 17 июня 2020

Я использую Typescript и имею класс. внутри этого класса у меня есть конструктор и метод, но я не могу вызвать этот метод в теле функции:

import  { ParentPlayer } from './parentPlayer'
import ws = require('ws')

export class MasterSocket{

    constructor(masterPlayer:ParentPlayer, serverPort:number, Notifier:any) {
       createPipeline(masterPlayer,serverPort,Notifier)
    }

    function createPipeline(masterPlayer:ParentPlayer, serverPort:number, Notifier:any){
    if(masterPlayer !== null)
      {
        const wss:ws.Server = new ws.Server({ port: serverPort})
        wss.on('connection', function connection(svr) {
            Notifier.emit('test','Pipeline established')

            svr.onmessage = (msg) =>
            {
                Notifier.emit('test','Message received at Pipeline: ' + msg)
            }

            svr.onclose = (evt) =>
            {
                Notifier.emit('test','Backend: Pipeline Closed: ' + evt.reason)
     >>>>>>>    createPipeline(masterPlayer,serverPort,Notifier)
            }

            svr.on('message', function incoming(message) {
            Notifier.emit('test','message received from: ' + message)
            })

          svr.send('this is a message sent from the Pipeline');
        })
      }
    }
}

любая помощь будет принята с благодарностью

1 Ответ

2 голосов
/ 17 июня 2020

Как уже упоминалось в peinearydevelopment, вам необходимо удалить ключевое слово function, чтобы createPipeline был фактическим методом класса.

Но вам также необходимо преобразовать обратный вызов onConnection в стрелочную функцию, чтобы сохранить this контекст класса (подробнее об этом здесь ):

wss.on('connection', connection(svr) => {
    // ...

    svr.onclose = (evt) => {
        Notifier.emit('test', 'Backend: Pipeline Closed: ' + evt.reason)
        this.createPipeline(masterPlayer, serverPort, Notifier)
    }
    //...
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...