From https://gpuweb.github.io/gpuweb/#dom-gpudevice-createcomputepipelineasync:
When pipeline is ready to be used or has been made invalid, resolve promise with pipeline.
It seems like we should be rejecting the promise if the created pipeline is invalid. I don't see any reason not to, and it would help alleviate some confusion about "how do you know if the pipeline created with createPipelineAsync() ended up being valid or not?"