refactor asyncEach