2017-11-20 2 views
0

Ich frage mich, wie ich einen Eventhandler in einer Ecma6-Klasse hinzufügen könnte. Das folgende Beispiel funktioniert, aber ich möchte die Event-Handler in der Klasse selbst.Ecma6 Class Event Handler

Hier ist der Code für die Klasse

class Bot { 
constructor(username,password,shared_secret,identity_secret,bot_number) { 
    this._username = username; 
    this._password = password; 
    this._shared_secret = shared_secret; 
    this._identity_secret = identity_secret; 
    this._bot_number = bot_number; 
    this._logged = false; 
    this._client = new SteamUser(); 
    this._manager = new TradeOfferManager({ 
     "steam": this._client, 
     "domain": "xxxxxxx", 
     "language": "en", 
     "pollInterval": "3000", 
     "cancelTime": "1800000" 
    }) 
    this._community = new SteamCommunity(); 

} 

get botNumber() { 
    return this._bot_number; 
} 

get client() { 
    return this._client; 
} 

get manager() { 
    return this._manager; 
} 

set logged(logged) { 
    this._logged = logged; 
} 

login() { 
    console.log("In Login Request for Bot: "+this._bot_number) 
    this._client.logOn({ 
     "accountName": this._username, 
     "password": this._password, 
     "twoFactorCode": SteamTotp.getAuthCode(this._shared_secret) 
    }) 
} 

setWebCookies(sessionID,cookies,botNumber,manager) { 
    manager.setCookies(cookies, function (err) { 
     if (err) { 
      console.log(err); 
      process.exit(1); // Fatal error since we couldn't get our API key 
      return; 
     } 
     console.log("Got API key: " + manager.apiKey+" for Bot Number: "+botNumber); 
    }); 
    this._community.setCookies(cookies); 
} 

Und hier, wo ich die Klasse zu verwenden und die Event-Handler außerhalb der Klasse hinzufügen

bot1.login(); 

bot1.client.on('webSession', function (sessionID, cookies) { 
    bot1.setWebCookies(sessionID,cookies,bot1.botNumber,bot1.manager); 
}); 

bot1.client.on('loggedOn', function() { 
    console.log("Bot "+bot1.botNumber+" successfully logged in!"); 
    bot1.logged(true); 
}); 

Und wieder würde ich diesen Event-Handler haben möchte in der Klasse selbst.

+0

Sicher, nur in eine Methode von 'Bot1'? Was ist das Problem, hast du das versucht? – Bergi

Antwort

0
setWebCookies() { 
    this.client.on('webSession', (sessionID, cookies) => { 
     this.setWebCookies(sessionID,cookies,this.botNumber,this.manager); 
    }); 
} 

Gibt es etwas falsches mit etwas in Ihrer Klasse zu verwenden? Beachten Sie, dass ich Ihren Callback zu einer Pfeilfunktion gemacht habe, so dass der this Kontext beibehalten wird. Sie können auch binden, wenn Sie möchten.