From e756c5a62bf4828f8eed9dea69c858ca674ddbc2 Mon Sep 17 00:00:00 2001 From: Evan Broder Date: Mon, 23 Jan 2023 09:11:50 -0800 Subject: [PATCH] mongo: In async wrappers, catch exceptions and reject Previously, if an exception was thrown in an async method, it would not be caught, which is unusual in an async method. Instead, catch the exception and return it as a rejected promise. --- packages/minimongo/cursor.js | 6 +++++- packages/mongo/collection.js | 6 +++++- packages/mongo/mongo_driver.js | 6 +++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/packages/minimongo/cursor.js b/packages/minimongo/cursor.js index 0c119a8f81..aaf43c80e2 100644 --- a/packages/minimongo/cursor.js +++ b/packages/minimongo/cursor.js @@ -520,6 +520,10 @@ export default class Cursor { ASYNC_CURSOR_METHODS.forEach(method => { const asyncName = getAsyncMethodName(method); Cursor.prototype[asyncName] = function(...args) { - return Promise.resolve(this[method].apply(this, args)); + try { + return Promise.resolve(this[method].apply(this, args)); + } catch (error) { + return Promise.reject(error); + } }; }); diff --git a/packages/mongo/collection.js b/packages/mongo/collection.js index d5b99edae4..6459e3e5f4 100644 --- a/packages/mongo/collection.js +++ b/packages/mongo/collection.js @@ -919,6 +919,10 @@ function popCallbackFromArgs(args) { ASYNC_COLLECTION_METHODS.forEach(methodName => { const methodNameAsync = getAsyncMethodName(methodName); Mongo.Collection.prototype[methodNameAsync] = function(...args) { - return Promise.resolve(this[methodName](...args)); + try { + return Promise.resolve(this[methodName](...args)); + } catch (error) { + return Promise.reject(error); + } }; }); diff --git a/packages/mongo/mongo_driver.js b/packages/mongo/mongo_driver.js index 7b7b24ec00..cad7529939 100644 --- a/packages/mongo/mongo_driver.js +++ b/packages/mongo/mongo_driver.js @@ -945,7 +945,11 @@ Cursor.prototype.count = function () { const methodNameAsync = getAsyncMethodName(methodName); Cursor.prototype[methodNameAsync] = function (...args) { - return Promise.resolve(this[methodName](...args)); + try { + return Promise.resolve(this[methodName](...args)); + } catch (error) { + return Promise.reject(error); + } }; });