глобальные или проходные функции - PullRequest
1 голос
/ 21 марта 2012

Попытка передать что-то другому. Говорит неопределенное Не уверен, как или почему.

clsapp.on 'mysqld', ->
  getHostById = (host) -> cls.getHostById.acq host, (c) -> JSON.stringify(result)

Мне нужен какой-то способ доступа к getHostById('localhost').hostname внутри другой части .js

clsapp.on getHostById('localhost'), (c) ->   
  console.log JSON.parse(getHostById('localhost')).hostname

является просто нулевым или неопределенным

1 Ответ

1 голос
/ 21 марта 2012

Трудно понять, о чем вы спрашиваете, но я сделаю несколько замечаний:

В коде

clsapp.on 'mysqld', ->
  getHostById = (host) -> cls.getHostById.acq host, (c) -> JSON.stringify(result)

Вы, вероятно, имели в виду, что аргумент обратного вызова должен называться result, а не c. Если вы не определяете result в другом месте.

Что еще более важно, у есть для более ясного способа написания этого кода. Немного помогает расширение определения getHostById на многострочное:

clsapp.on 'mysqld', ->
  getHostById = (host) ->
    cls.getHostById.acq host, (result) -> JSON.stringify(result)

Теперь, я думаю, что в конечном итоге ваша проблема заключается в том, что вы пытаетесь заставить асинхронную функцию вести себя синхронно, чего вы не можете сделать в JavaScript (или CoffeeScript, который представляет собой тонкий синтаксический слой поверх JS). Поскольку cls.getHostById.acq принимает обратный вызов, он почти наверняка предназначен для обратного вызова после того, как он вернет , чтобы не блокировать поток. Это означает, что вы не можете написать getHostById функцию, которая просто возвращает значение, как показывает ваш пример JSON.parse(getHostById('localhost')). Вам придется использовать обратный вызов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...