only promise gets reject, streams can resolve multiple times