use promises to run requests in parallel