2012-10-29 111 views
0

我正在通過Node Beginner Tutorial的方式工作,同時根據我的開發風格定製事物。例如,我選擇使用coffeescript和requirejs。後者涉及大量的重要常規數量的回調湯。通常情況下,我喜歡使用承諾來處理這些情況。經過一些最小的研究promise-io似乎是一個合理的解決方案。它的工作原理,但突然間我遇到了一個問題,結合使用所有的承諾(這似乎與jQuery.When類似 - 這是我常用的技術)。節點promise-io - 爲什麼會崩潰?

以下是我的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 

回答

1

乍一看,你的第一個例子將覆蓋您加載requirejsroute,所以它運行第二次,你將有完全不同的價值。

嘗試改變

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

[postData, routeCb] = x 
routeCb pathdata, response, postData 
+0

哦,你是絕對正確的!我必須弄清楚如何直接導出單個值而不是通過屬性。 –