2015-05-07 18 views
1

使用Q和請求模塊,我試圖將一個動態數量的延遲推入一個數組,因此我可以稍後調用Q.all。我已經閱讀,下面的內容儘可能接近,但不起作用。使用Q.js創建一個延遲數組

我想我得到Q.all部分,但它是我應該如何存儲數組中的每個延遲是我被絆倒。

_ = require 'underscore' 
request = require 'request' 
Q = require 'q' 


class Github 

    ## Filter issues by "important Label" 
    getIssues: (callback) -> 

    options ... 

    request options, (err, resp, body) => 

     issues = _.filter JSON.parse(body), (issue) -> 
     ... 

     ## I'm attempting to store my promises in this `deferreds` 
     deferreds = @getPulls issues 


     ## to test I'm getting something, and I do 
     setTimeout (=> console.log @pulls.length), 2500 

     ## but this gives me 0 
     Q.all(deferreds).then((a,b) => 
     console.log 'Q all', @pulls.length 
    ) 


    # Get PR info for important issues 
    getPulls: (issues) -> 

    deferreds = [] 
    @pulls = [] 

    for issue in issues 

     options = ... 
     deferred = Q.defer() 

     deferreds.push request options, (err, resp, body) => 
     @pulls.push JSON.parse body 
     deferred.resolve(JSON.parse(body)) 

     return deferred.promise 


    return deferreds 



module.exports = Github 

回答

0

我想通了 -

class Github 

    pulls = [] 

    getIssues: (callback) ->  

    options = ... 
    request options, (err, resp, body) => 

     issues = _.filter JSON.parse(body), (issue) -> 
     .... 

     @pulls = [] 
     deferreds = [] 

     for issue in issues 
     d = @makeDeferred issue 
     deferreds.push d 

     Q.all(deferreds).then((a,b) => 
     console.log 'Q all done', @pulls.length 
    ) 


    makeDeferred: (issue) -> 
    deferred = Q.defer() 

    options = ... 

    request options, (err, resp, body) => 
     @pulls.push JSON.parse(body) 
     deferred.resolve() 

    deferred.promise 


module.exports = Github