Passando variáveis por uma cadeia de promessas [duplicado]

Esta pergunta já tem uma resposta aqui:

Como encadear e compartilhar resultados anteriores com o Promises [duplicado] 1 resposta

Existe uma maneira melhor de fazer isso?

let foo;
return functionA().then(result => {
  foo = result;
  return functionB();
}).then(bar => {
  return functionC(foo, bar);
});

Observe que o resultado defunctionA é necessária entrada parafunctionC. Usar uma variável fora do escopo da promessa funciona bem, mas parece meio nojento. Existe uma maneira idiomática limpa de fazer isso?

Observe que não tenho a oportunidade de alterar a API de nenhuma das funções que estou chamando.

questionAnswers(2)

yourAnswerToTheQuestion