我有以下在Javascript中完美运行的功能
function graphite_get_data(target) {
return context.metric(function(start, stop, step, callback) {
var fetch_time = new Date().getTime();
if ((fetch_time-current_time) < 6000 && saved_data.length > 0) {
callback(null, graphite_parse(saved_data));
}
else {
// -------------- Begin Request New Data ------------------
d3.json(host + "/render?format=json"
+ "&target=" + encodeURIComponent(target)
+ "&from=" + graphite_format_date(start - 2 * step)
+ "&until=" + graphite_format_date(stop - 1000),
function(data) {
if (!data) return callback(new Error("unable to load data"));
current_time = fetch_time
saved_data = data;
callback(null, graphite_parse(data));
});
// -------------- End Request New Data --------------------
} // else
}); // return
}
当我尝试使用http://js2coffee.org将其转换为coffeescript时,它不起作用,我不确定如何调试:
graphite_get_data = (target) ->
console.log(global_pod)
console.log("hi") #prints
context.metric (start, stop, step, callback) ->
console.log("hi") #doesn't print
fetch_time = new Date().getTime()
if (fetch_time - current_time) < 6000 and saved_data.length > 0
callback null, graphite_parse(saved_data) # will use global variable test_pod
else
# -------------- Begin Request New Data ------------------
d3.json host + "/render?format=json" + "&target=" + encodeURIComponent(target) + "&from=" + graphite_format_date(start - 2 * step) + "&until=" + graphite_format_date(stop - 1000), (data) ->
return callback(new Error("unable to load data")) unless data
current_time = fetch_time
saved_data = data
callback null, graphite_parse(data) #will use global variable test_pod
# -------------- End Request New Data --------------------
你能告诉我如何调试咖啡脚本吗?
编辑:我检查了生成的javascript并看到了这个 graphite_get_data = function(target) {
var fetch_time;
console.log("hi");
context.metric(function(start, stop, step, callback) {});
fetch_time = new Date().getTime();
console.log("hi");
if ((fetch_time - current_time) < 6000 && saved_data.length > 0) {
callback(null, graphite_parse(saved_data));
return true;
}
else {
d3.json(host + "/render?format=json" + "&target=" + encodeURIComponent(target) + "&from=" + graphite_format_date(start - 2 * step) + "&until=" + graphite_format_date(stop - 1000), function(data) {
if (!data) {
return callback(new Error("unable to load data"));
} // end if
current_time = fetch_time;
saved_data = data;
callback(null, graphite_parse(data));
return true;
}); //end function(data)
return true;
} //end else
// missing });
};
graphite_format_date = function(time) {
return Math.floor(time / 1000);
};
return graphite_parse = function(data) {
var pod_data, pod_json_data;
pod_json_data = $.grep(data, function(e) { return e.target === test_pod; });
pod_data = pod_json_data[0]["datapoints"].slice(1).map(function(d) { return d[0]; });
return pod_data;
};
}
}); // what is this here?? it should be in missing
}).call(this);
并发现问题是});在一个地方丢失并添加到另一个错误的地方
仍然致力于如何解决它
答案 0 :(得分:0)
你能告诉我如何调试咖啡脚本吗?
当然:使用sourcemaps in Chrome。请记住,有时咖啡中的一步是JS的几个步骤,所以有时你会看到奇怪的踩踏行为。
关于代码的转换,我认为您可能复制或粘贴了错误的内容,因为它对我来说很好看:
graphite_get_data = (target) ->
context.metric (start, stop, step, callback) ->
fetch_time = new Date().getTime()
if (fetch_time - current_time) < 6000 and saved_data.length > 0
callback null, graphite_parse(saved_data)
else
# -------------- Begin Request New Data ------------------
d3.json host + "/render?format=json" + "&target=" + encodeURIComponent(target) + "&from=" + graphite_format_date(start - 2 * step) + "&until=" + graphite_format_date(stop - 1000), (data) ->
return callback(new Error("unable to load data")) unless data
current_time = fetch_time
saved_data = data
callback null, graphite_parse(data)
我发现js2coffee非常可靠。
您的代码存在的最大问题是:
context.metric(function(start, stop, step, callback) {});
在您的版本中,这条线没有出现,但在我的版本中没问题。我不知道为什么,我怀疑你在咖啡代码中遗漏了一些缩进。 coffeescript中的缩进非常重要。
我还建议在Chrome中尝试CoffeeScript Enhanced - js2coffee正在为此流量付费而没有为此获取任何内容。
答案 1 :(得分:0)
在coffeescript的开头看起来有一个缩进问题。
这就是生成第二个javascript的原因:
graphite_get_data = (target) ->
context.metric (start, stop, step, callback) ->
fetch_time = new Date().getTime()
我的coffeescript开始了:
graphite_get_data = (target) ->
context.metric( (start, stop, step, callback) ->
fetch_time = new Date().getTime()
if ...
else ...
)
答案 2 :(得分:-1)
你能告诉我如何调试咖啡脚本吗?
你做不到。调试生成的JavaScript。 CoffeeScript不直接运行,而是转换为JavaScript。