diff --git a/lib/shared/dm-ops/process-dm-ops.js b/lib/shared/dm-ops/process-dm-ops.js
--- a/lib/shared/dm-ops/process-dm-ops.js
+++ b/lib/shared/dm-ops/process-dm-ops.js
@@ -351,7 +351,19 @@
         localMessageInfo.outboundP2PMessageIDs.length > 0
       ) {
         processOutboundMessages(localMessageInfo.outboundP2PMessageIDs, dmOpID);
-        return promise;
+        try {
+          // This code should never throw.
+          return await promise;
+        } catch (e) {
+          invariant(
+            localMessageInfo.outboundP2PMessageIDs,
+            'outboundP2PMessageIDs should be defined',
+          );
+          return {
+            result: 'failure',
+            failedMessageIDs: localMessageInfo.outboundP2PMessageIDs,
+          };
+        }
       }
 
       const outboundP2PMessages = await createMessagesToPeersFromDMOp(
@@ -382,7 +394,17 @@
         },
       );
 
-      return promise;
+      try {
+        // This code should never throw.
+        return await promise;
+      } catch (e) {
+        return {
+          result: 'failure',
+          failedMessageIDs: outboundP2PMessages.map(
+            message => message.messageID,
+          ),
+        };
+      }
     },
     [
       allPeerUserIDAndDeviceIDs,