2013-07-03 3 views
3

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

У меня также была эта проблема со встроенным 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) 

ответ

2

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

+0

Ах да, я этого не заметил! Это требование coffeescript, чтобы иметь пустую строку в eof? Вероятно, я должен использовать редактор, который может отображать пробелы в будущем! Благодарю. – Sam

+0

В основном coffeescript должен понимать, когда изменяется уровень отступа, и в этом случае вы не можете закончить файл с отступом и без новой строки. Если ваша последняя строка файла была красной слева, вы бы не ударили по этому краю. В любом случае, всегда была лучшей практикой unix, чтобы закончить все текстовые файлы с помощью новой строки, поэтому установите для своего редактора просто автоматическое выполнение. И да, если вы собираетесь кодировать в незашифрованных языках, лучше всего использовать редактор с хорошей способностью отображать и манипулировать пробелами. –