Délai d'attente dans async/await

Je suis avec Node.js et Tapuscrits et je suis en utilisant async/await.
C'est mon cas de test:

async function doSomethingInSeries() {
    const res1 = await callApi();
    const res2 = await persistInDB(res1);
    const res3 = await doHeavyComputation(res1);
    return 'simle';
}

Je voudrais définir un délai d'attente pour l'ensemble de la fonction. I. e. si res1 prend 2 secondes, res2 prend 0,5 secondes, res3 prend que 5 secondes j'aimerais avoir un délai d'attente qu'au bout de 3 secondes, permettez-moi de jeter une erreur.

Normale avec une setTimeout appel est un problème parce que la portée est perdu:

async function doSomethingInSeries() {
    const timerId = setTimeout(function() {
        throw new Error('timeout');
    });

    const res1 = await callApi();
    const res2 = await persistInDB(res1);
    const res3 = await doHeavyComputation(res1);

    clearTimeout(timerId);

    return 'simle';
}

Et je ne peux pas l'attraper à la normale Promise.catch:

doSomethingInSeries().catch(function(err) {
    //errors in res1, res2, res3 will be catched here
    //but the setTimeout thing is not!!
});

Toutes les idées sur la façon de résoudre?

Êtes-vous à l'aide d'une promesse spécifique de la bibliothèque?
Non, juste la norme promesse.
Donc 2 + 0.5 + 5 + 3 rend un délai d'attente de 11,5 secondes?

OriginalL'auteur nkint | 2016-05-09