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 выше, который имеет эту строку в неправильном месте.