奇怪的是,将咖啡脚本转换成javascript。为什么?

奇怪的是,将咖啡脚本转换成javascript。为什么?,javascript,coffeescript,Javascript,Coffeescript,我正在执行咖啡脚本中的get请求: parseRequest = (line) -> try request = JSON.parse(line) catch err try switch request.method when 'authorize' req = http.get { port: 8080, path: "/test/config" }, (res) ->

我正在执行咖啡脚本中的get请求:

parseRequest = (line) ->
     try
       request = JSON.parse(line)
     catch err
     try
    switch request.method
        when 'authorize'
            req = http.get { port: 8080, path: "/test/config" }, (res) ->
            console.log "Get response: #{res.statusCode}"
            res.on 'data', (chunk) -> 
                console.log('body: ' + chunk)
                request.params[0] = JSON.parse(chunk).config.username
                console.log "Request: " + request.params[0]
                request.params[1] = JSON.parse(chunk).config.password
                console.log "Request: " + request.params[1]
                line = JSON.stringify(request)
                console.log "Changed username and pass to: #{request.params[0]},#{request.params[1]}"
                ......{lot of code}.........
                return line
在输出中,我得到如下结果:

 Changed username and pass to: original,p
 Get response: 200
 body: {"config":{"username":"newuser","password":"newpass"}}
 Request: newuser
 Request: newpass
所以,第一个输出的最后一条日志消息和函数的结果(即存储在“行”中)仍然包含旧值。当然,我尝试了很多不同的变体,试图解决这个问题,但是没有成功。然后我决定看看基于这个咖啡脚本编译的javascript。我看到:

req = http.get({
    port: 8080,
    path: "/test/config"
}, function(res) {
    console.log("Get response: " + res.statusCode);
    return res.on('data', function(chunk) {
        console.log('body: ' + chunk);
        request.params[0] = JSON.parse(chunk).config.username;
        console.log("Request: " + request.params[0]);
        request.params[1] = JSON.parse(chunk).config.password;
        return console.log("Request: " + request.params[1]);
     });
 });
 line = JSON.stringify(request);
 console.log("Changed username and pass to: " + request.params[0] + "," + request.params[1]);

在java脚本中,最后两行被移出了“data”上的作用域函数,这就是为什么我在第一行接收最后一个输出,这就是为什么变量行包含旧值。但为什么咖啡脚本会将我的脚本翻译成这样的javascript代码呢?与可变线的可见性有关的东西?我怎样才能修好它,得到我在咖啡脚本中所期待的

问题在于混合空格和制表符。应该在函数中的所有行都有6个相等缩进的制表符,但在函数中包含的所有字符串中,第3个制表符和第5个制表符之间有4个空格,所以看起来像制表符,但事实并非如此。同时,最后两个字符串在缩进中只有制表符。这是处理来自其他来源的字符串的问题。

这可能是空白的问题吗?这是您请求中的真正缩进吗?如果是的话,这是非常奇怪的,而且奇怪的是,在CoffeeScript或任何其他用空格定义结构的语言中,缩进是一个非常糟糕的主意。也许你混合了空格和制表符。顺便说一句,仅仅因为你可以使用匿名函数并不意味着你应该这样做,那么多的代码表明你可能想要将你的代码重构成一堆更小的命名函数以清晰明了。你的意思是缩进整个parseRequest函数还是只缩进它的第一行?当然,我已经重新格式化了stackoverflow上的代码,但缩进的想法仍然是一样的。我将检查可能出现的问题与混合的白色空间和标签。据我所知,咖啡脚本更喜欢制表符?空格在对空格敏感的语言中更常见。