Quando rejeitar / resolver uma promessa

Estou pensando em exatamente quando preciso rejeitar uma promessa. Eu encontrei algumas perguntas sobre este tópico, mas não consegui encontrar uma resposta adequada.Quando devo rejeitar uma promessa?

Este artigohttp://howtonode.org/6666a4b74d7434144cff717c828be2c3953d46e7/promises diz:

Resolver: uma promessa bem-sucedida é "resolvida", que chama os ouvintes de sucesso que estão aguardando e lembra-se do valor que foi resolvido para futuros ouvintes de sucesso conectados. A resolução está correlacionada a um valor retornado.Rejeitar: Quando uma condição de erro é encontrada, um Promise é 'rejeitado', que invoca os ouvintes de erro que estão aguardando e lembra o valor que foi rejeitado para futuros ouvintes de erro que estão conectados. A rejeição está correlacionada a uma exceção gerada.

Esta é a diretriz principal? Aquele só rejeita uma promessa se uma exceção ocorreu?

Mas no caso de uma função como

findUserByEmail()

Eu esperaria que a função retornasse um usuário, para que eu pudesse continuar a cadeia sem verificar o resultado

findUserByEmail()
    .then(sendWelcomeBackEmail)
    .then(doSomeNiceStuff)
    .then(etc..)

Quais são as melhores práticas comuns?

questionAnswers(2)

yourAnswerToTheQuestion