I have something like
new Promise (resolve, reject) ->
  trader.getTrades limit, skip, (err, trades) ->
    return reject err if err
    resolve trades
.each (trade) ->
  doStuff trade
limit is set to some arbitrary number, say 10 and skip starts at 0. I want to keep increasing skip until there are no more trades.
The doStuff is a function I'm using to process each trade.
This works the first time, but I want to get more trades in a paginated fashion. Specifically, I want to run trader.getTrades with a higher skip until trades.length is 0
You should be able to use promisify()/promisifyAll() to convert trader.getTrades() to an async version that returns a promise.  Then, something like this should work well:
function getAllTrades(limit, offset, query) {
    var allTrades = [];
    function getTrades(limit, offset, query){
        return trader.getTradesAsync(limit, offset, query)
            .each(function(trade) {
                allTrades.push(trade)
                // or, doStuff(trade), etc.
            })
            .then(function(trades) {
                if (trades.length === limit) {
                    offset += limit;
                    return getTrades(limit, offset, query);
                } else {
                    return allTrades;
                }
            })
            .catch(function(e) {
                console.log(e.stack);
            })
    }
    return getTrades(limit, offset, query)
}
If you knew the total # of trades in advance you could use a different strategy with .map and {concurrency: N} to get N pages of trades at once.  
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With