Use async.eachLimit to avoid unbounded asyncing