Como você pode tentar novamente após uma exceção no Javascript ao usar promessas?

Estou usando a biblioteca de promessas do Bluebird. Eu tenho uma cadeia de funções prometidas, como as seguintes:

    receiveMessageAsync(params)
    .then(function(data)) {
        return [data, handleMessageAsync(request)];
    })
    .spread(function(data, response) {
        return [response, deleteMessageAsync(request)];
    })
    .spread(function(response, data) {
        return sendResponseAsync(response);
    })
    .then(function(data) {
        return waitForMessage(data);
    })
    .catch (function(err) {
       // handle error here
    });

Ocasionalmente, o sendMessage falha porque, digamos, o servidor ao qual responder não está disponível. Quero que o código continue tentando responder para sempre até que seja bem-sucedido. Você não pode simplesmente envolver o sendMessage em uma captura porque, na verdade, não gera uma exceção, suponho que ela chama a função "error" que, nesse código prometido, é a "catch" na parte inferior. Portanto, deve haver uma maneira de "tentar novamente" enviar a mensagem na seção "captura". O problema é que, mesmo se eu tentar novamente um loop no "catch", ainda não tenho como pular para a cadeia de promessas e executar as demais funções prometidas. Como faço para lidar com isso?

EDITAR:

Minha nova tentativa para uma postagem HTTP acabou assim:

function retry(func) {
    return func()
        .spread(function(httpResponse) {
            if (httpResponse.statusCode != 200) {
                Log.error("HTTP post returned error status: "+httpResponse.statusCode);
                Sleep.sleep(5);
                return retry(func);
            }
        })
        .catch(function(err) {
            Log.err("Unable to send response via HTTP");
            Sleep.sleep(5);
            return retry(func);
        });
}

questionAnswers(3)

yourAnswerToTheQuestion