Repetir uma etapa da promessa

Suponha que eu tenha a seguinte cadeia de Promessa:

var result = Promise.resolve(filename)
    .then(unpackDataFromFile)
    .then(transformData)
    .then(compileDara)
    .then(writeData);

Agora eu não tenho apenas umtransformData função, mas dois ou mais, armazenados em uma matriz. Quero experimentar o primeiro e se ocompileData função falhar, tente o segundo e assim sucessivamente atécompileData for bem-sucedido ou a matriz detransformData funções está esgotada.

Alguém pode me dar um exemplo de como implementar isso?

Executando tudotransformData funções e fornecer a matriz de resultados paracompileData não é uma opção, pois as funções são muito caras e eu quero executar o menor número possível delas.

transformData em si também retorna uma promessa, se isso ajudar.

questionAnswers(3)

yourAnswerToTheQuestion