more explanations, and added onEach async versions