Existe realmente uma diferença fundamental entre retornos de chamada e promessas?

Ao fazer programação assíncrona de thread único, há duas técnicas principais com as quais estou familiarizado. O mais comum é usar retornos de chamada. Isso significa passar para a função que atua de forma assíncrona uma função de retorno de chamada como parâmetro. Quando a operação assíncrona for...