use async.reduce