CoffeeScript függvény paramétere node.js API

szavazat
0

Írok egy plugin Atom CoffeeScript és én használ ez nodejs API (telegram.link) . Van néhány aszimmetrikus funkciók, így azt kell átadni funkcionál paraméterek kap nevezik visszahívás. A problémám az, hogy amikor a következő kódot:

login: ->
    console.log 'Loging in'
    @client = telegramLink.createClient({
        id: config.telegram.prod.app.id,
        hash: config.telegram.prod.app.hash,
        version: '0.0.1',
        lang: 'en'
    },
    config.telegram.prod.primaryDataCenter);
    @client.createAuthKey(@authCallback)
    console.log @client

authCallback: (auth) ->
    console.log auth
    @client.auth.sendCode(config.telegram.test.telNr, 5, 'en', @sendCodeCallback)

ami lesz összeállítani, hogy:

login: function() {
  console.log('Loging in');
  this.client = telegramLink.createClient({
    id: 12345,
    hash: 'q1w2e3r4t5y6u7i8o9p0',
    version: '0.0.1',
    lang: 'en'
  }, config.telegram.prod.primaryDataCenter);
  this.client.createAuthKey(this.authCallback);
  return console.log(this.client);
},
authCallback: function(auth) {
  console.log(auth);
  return this.client.auth.sendCode(config.telegram.test.telNr, 5, 'en', this.sendCodeCallback);
}

@client nem definiált a authCallback funkciót.

Olvastam StackOverflow ( CoffeeScripts osztályok - hozzáférés ingatlant callback ), amit érdemes használni =>(zsír-nyíl), ezért megpróbáltam ezt aminek eredményeként az alábbi összeállított script:

authCallback: (function(_this) {
  return function(auth) {
    console.log(auth);
    return _this.client.auth.sendCode(config.telegram.test.telNr, 5, 'en', _this.sendCodeCallback);
  };
})(this)

De @clientnem ismerik. Azt hiszem, hogy talán a visszahívási funkció hívás ki az API nem működik megfelelően többé.

Mi mást tehetnék, hogy az eredeti hatálya, de hogy ez a munka az API?

A kérdést 10/11/2015 18:02
a forrás felhasználó
Más nyelveken...                            


2 válasz

szavazat
0

Ha megnézem a indetion a kód, azt hiszem, hogy nem egy osztályon belül. Amennyiben Ön nem a belsejében egy objektumpéldányt „ez” vagy „@” nem fog működni. A másik dolog az, hogy a meghatározás a visszahívás. Meg kell, amely nem minősül módszer az osztály. Az osztály is valahogy így néz ki:

class MyClass
  constructor: ->
    // do something
  login: ->
    @client = telegramLink.createClient({
        id: config.telegram.prod.app.id,
        hash: config.telegram.prod.app.hash,
        version: '0.0.1',
        lang: 'en'

     @client.authCallback: (auth) =>
       console.log auth
       @client.auth.sendCode(config.telegram.test.telNr, 5, 'en', @sendCodeCallback)

Ez az osztály a dolog működik, akkor létre kell hozni egy példány, így lehet, hogy nem az, amit akarsz.

Meg lehet változtatni a kódot, hogy úgy működik, mint definiált csak függvényekkel.

login: ->
    console.log 'Loging in'
    client = telegramLink.createClient({
        id: config.telegram.prod.app.id,
        hash: config.telegram.prod.app.hash,
        version: '0.0.1',
        lang: 'en'
    },
    config.telegram.prod.primaryDataCenter);
    client.createAuthKey(@authCallback)
    console.log @client

authCallback: (auth) ->
  console.log auth
  client.auth.sendCode(config.telegram.test.telNr, 5, 'en', sendCodeCallback)

Tipp: a meghatározása a lehetőségeket szótárhoz belsejében createClient eljárás külleme JS és nem úgy, mint Coffescript. Szintén a „;” ne használja. Keverni a definíciók is létrehozhat néhány hibát.

Válaszolt 11/11/2015 09:53
a forrás felhasználó

szavazat
0

Megoldás:

Ma találtam a megoldást a problémára. Most a kód így néz ki:

login: ->
console.log 'Logging in'
@client =
  telegramLink.createClient({
    id: config.telegram.prod.app.id
    hash: config.telegram.prod.app.hash
    version: '0.0.1'
    lang: 'en'
  }
  config.telegram.prod.primaryDataCenter)
@client.createAuthKey((auth) =>
  console.log @client.auth
  @client.auth.sendCode(
    config.telegram.test.telNr,
    5,
    'en',
    @sendCodeCallback))
console.log @client
Válaszolt 11/11/2015 13:59
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more