Comment jeter l'exception de fonction async

J'ai une fonction async que je m'attends à jeter l'exception en cas d'échec. Cependant, quelque chose semble la prévention de cette:

en omettant les blocs try catch-je attendre la levée d'une exception qui je veux de la poignée à l'extérieur de la fonction.

Le résultat que j'obtiens est un peu confus:

(node:10636) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): E11000 duplicate key error index.

(node:10636) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

async f(obj) {
    await db.collection('...').save(obj);
}

J'obtiens le même résultat quand j'ai essayer d'attraper l'exception et de jeter quelque chose d'autre à la place:

async f(obj) {
    try {
        await db.collection('...').save(obj);
    } catch(e) {
        throw e.message;
    }
}

La fonction est appelée à partir d'un bloc try, donc je ne vois pas comment c'est une Promesse non Gérée.

Je suis en train d'utiliser f comme paramètre d'une autre fonction:

g(obj, handler) {
    try {
        handler(obj);
    } catch(e);
        ...
    }
}

g(objToSave, f);
Comme une note de côté, votre rethrow est incorrect... Vous devriez être en utilisant catch(e) { throw e; }. Parce que (1) e.message est une chaîne de caractères et vous ne devriez pas simplement jeter une corde et (2) e peut inclure d'autres paramètres qui pourraient être utiles au prochain niveau.

OriginalL'auteur user1063963 | 2017-03-21