implement the promise version of series