Discards all data on this stream, but signals when it is done or an error occurred.
When subscribing using drain, cancelOnError will be true. This means
that the future will complete with the first error on this stream and then
cancel the subscription.
If this stream emits an error, or the call to
the returned future is completed with that error,
and processing is stopped.
In case of a
done event the future completes with the given
Future<E> drain<E>([E futureValue]) => listen(null, cancelOnError: true).asFuture<E>(futureValue);