first cut of PromiseMap implementation