another small simplification: use promise.spread()