We don't know the size of `cmd1`'s output but pipes have a limited buffer size. For very large data, use a temporary file. Else, use this:

 result=$(cmd1) && cmd2 <<< "$result"
 unset result