feels a bit cleaner to use reduce rather than reassigning the promise