0

我正在学习Node Beginner Tutorial,同时根据我的开发风格定制一些东西。例如我选择使用coffeescript 和requirejs。后者涉及大量常规数量之上的回调汤。通常这些是我喜欢使用 Promise 处理的情况。经过一些最小的研究,promise-io似乎是一个合理的解决方案。它可以工作,但突然间我遇到了一个使用 all 组合承诺的问题(这似乎类似于 jQuery.when - 这是我经常使用的一种技术)。

以下是我的 server.coffee 文件。因为它工作得很好,用all调用替换嵌套的延迟服务一个请求,然后挂起服务器。有谁知道问题是什么?

exports.start = ->
    requirejs ['http', 'url', './route'], (http, url, route)->
        console.log "Starting server"
        server = http.createServer (request, response) ->
            pathdata = url.parse request.url

            ###
            #this breaks
            promise.all(readingPost(request), route.promise).then (x) ->
                [postData, route] = x
                route pathdata, response, postData
            ###
            #this works
            readingPost(request).then (postData) -> route.promise.then (route) ->
                route pathdata, response, postData

        server.listen 8888

readingPost = (request) ->
    request.setEncoding 'utf-8'
    data = ''
    request.addListener 'data', (dataChunk) ->
        data += dataChunk
    d = promise.Deferred()
    request.addListener 'end', -> d.resolve data
    d
4

1 回答 1

1

乍一看,您的第一个示例将覆盖route您加载的requirejs,因此第二次运行时,您将获得完全不同的价值。

尝试改变

[postData, route] = x
route pathdata, response, postData

[postData, routeCb] = x
routeCb pathdata, response, postData
于 2012-10-29T05:44:56.193 回答