Coffeescript обратный вызов

Привет, я пытаюсь написать скрипт аддона для hubot. Кажется, у меня проблема со сферой. Ссылка на "msg" внутри ответного вызова fork не определена, я не вижу никаких переменных в обратном вызове.

У меня также была такая же проблема со встроенным jira-issues.coffee! Вчера в этом сценарии jiraUrl не был определен в обратном вызове. Этим утром он снова работал и теперь перестал работать (после того, как я перезапустил Hubot). Я никогда даже не изменял это.

Кто-нибудь испытывал что-нибудь подобное?

githubApi = require("node-github")

module.exports = (robot) ->
  github = new githubApi { "version": "3.0.0" }
  github.authenticate { "type":"basic", "username":process.env.HUBOT_GITHUB_USER, "password":process.env.HUBOT_GITHUB_P
ASSWORD }
  robot.respond /kickstart\s(\S+)/i, (msg) ->
    name = msg.match[1]
    msg.send name
    base_url = process.env.HUBOT_GITHUB_API || 'https://api.github.com'
    github.repos.fork {"user":"Raven", "repo":"Raven","org":"codedemos"}, (err,data) ->
      if err
        msg.send "error :("
      else
        msg.send "Fork Complete..."

это компилируется в

// Generated by CoffeeScript 1.6.3
(function() {
  var githubApi;

  githubApi = require("node-github");

  module.exports = function(robot) {
    var github;
    github = new githubApi({
      "version": "3.0.0"
    });
    github.authenticate({
      "type": "basic",
      "username": process.env.HUBOT_GITHUB_USER,
      "password": process.env.HUBOT_GITHUB_PASSWORD
    });
    return robot.respond(/kickstart\s(\S+)/i, function(msg) {
      var base_url, name;
      name = msg.match[1];
      msg.send(name);
      base_url = process.env.HUBOT_GITHUB_API || 'https://api.github.com';
      return github.repos.fork({
        "user": "Raven",
        "repo": "Raven",
        "org": "codedemos"
      }, function(err, data) {
        var id;
        if (err) {
          return msg.send("error :(");
        } else {
          return id = data.id;
        }
      });
    });
  };

  msg.send("Fork Complete...");

}).call(this);

Который выглядит хорошо, но работает он дает:

ReferenceError: msg is not defined
  at Object.<anonymous> (/opt/kbot/scripts/kickstart.coffee:48:2, <js>:36:3)
  at Object.<anonymous> (/opt/kbot/scripts/kickstart.coffee:33:1, <js>:38:4)
  at Module._compile (module.js:456:26)

1 ответ

Решение

Это почти наверняка проблема пробелов с этой последней строкой. Тройная проверка, что вы используете последовательный отступ во всем файле и убедитесь, что ваш файл имеет последний перевод строки после msg.send "Fork Complete...", Я скопировал и вставил ваш код coffeescript и скомпилировал его в javascript и последний msg.send линия ставится правильно inside правильная функция, против вашего JS выше, который имеет эту строку в неправильном месте.

Другие вопросы по тегам