more work
diff --git a/lib/sync.js b/lib/sync.js
index b4a99b6..5f46cfb 100644
--- a/lib/sync.js
+++ b/lib/sync.js
@@ -149,9 +149,7 @@
       self.emit('error', err);
     }
     self.removeAllListeners();
-    if (!complete) {
-      return utils.Promise.reject(err);
-    }
+    throw err;
   });
 
   this.then = function (success, err) {
diff --git a/tests/integration/test.sync.js b/tests/integration/test.sync.js
index 0839bb0..716bc57 100644
--- a/tests/integration/test.sync.js
+++ b/tests/integration/test.sync.js
@@ -124,7 +124,6 @@
 
       // intentionally throw an error during replication
       remote.allDocs = function (opts) {
-        // Chrome shows an "uncaught (in Promise)" error, but it's okay
         return PouchDB.utils.Promise.reject(new Error('flunking you'));
       };
 
@@ -133,6 +132,8 @@
       }).then(function () {
         return new PouchDB.utils.Promise(function (resolve) {
           db.sync(remote).on('error', resolve);
+        }).catch(function () {
+          // avoid annoying chrome warning about uncaught (in promise)
         });
       }).then(function (err) {
         should.exist(err);
@@ -153,7 +154,6 @@
 
       // intentionally throw an error during replication
       remote.allDocs = function (opts) {
-        // Chrome shows an "uncaught (in Promise)" error, but it's okay
         return PouchDB.utils.Promise.reject(new Error('flunking you'));
       };
 
@@ -163,6 +163,8 @@
         return new PouchDB.utils.Promise(function (resolve) {
           db.sync(remote, function (err) {
             resolve(err);
+          }).catch(function () {
+            // avoid annoying chrome warning about uncaught (in promise)
           });
         });
       }).then(function (err) {