Reads a stream sequentially and returns a promise if data is not yet available