0

開発スタイルに合わせて調整しながら、ノードビギナーチュートリアルを進めています。たとえば、私はcoffeescriptとrequirejsを使用することを選択しています。後者は、かなりの定期的な量に加えて、大量のコールバックスープを含みます。通常、これらは私がプロミスを使用して対処したい状況です。いくつかの最小限の研究の約束の後-ioは合理的な解決策のようです。それは機能しますが、突然、すべてを使用してpromiseを組み合わせる際に問題が発生します(これはjQuery.whenに類似しているようです-これは私が頻繁に使用する手法です)。

以下は私のserver.coffeeファイルです。all完全に機能するため、ネストされた遅延を呼び出しに置き換えると、 1つの要求が処理され、サーバーがハングします。誰かが問題が何であるかを知っていますか?

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ため、2回目に実行すると、まったく異なる値になります。

変更してみてください

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

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