Somehow that breaks the code. 

I think the return of readBytes() is actually utilised in .then() (i.e. .then() takes the future returned by readBytes and acts on it). 

Also, from the Future.foreach spec:
"The return values of all Futures are discarded. Any errors will cause the iteration to stop and will be piped through the returned Future." 

So no need to return as this will run to completion and then loop over anyway. 
Same applies to the other comment, I think?