I tried removing return (0), as you suggested (see below) but tests then failed. My reading of the promise specifications is that the onFulfilled and onRejected function should return values or throw errors. What happens when they do neither seems to be undefined. I have very little experience with promises, but it surprises me that no return value from an onRejected function results in the promise being fulfilled, yet in node it is, with the value undefined.

Based on my reading of the specs, it seems better that onFulfilled and onRejected, if they are functions, either return a value or throw and error.

Is there something I am missing?

To be clear, I tried:

```
  return target.get(id).then(function (targetDoc) {
    return src.get(id).then(function (sourceDoc) {
      if (targetDoc.last_seq === sourceDoc.last_seq) {
        return (sourceDoc.last_seq);
      }
      return 0;
    }, function (err) {
      if (err.status !== 404) {
        throw err;
      }
    });
  }, function (err) {
    if (err.status !== 404) {
      throw err;
    }
  });
```
I don't know what you mean by "catch the exception twice". The code throws an exception in two places (one for target and the other for source) but the promise catches the exceptions, or I misunderstand your meaning (or promises and exceptions, which is entirely possible - I have little experience with them).

Calvin has warned me off using .catch, due to inadequate support in some browsers, so I have modified your preferred idiom to use .then twice.