Problemet du har är att mongoose-förfrågningar inte ger fullvärdiga löften -- direkt citerar https:// mongoosejs.com/docs/promises.html (v4.7.6)
// A query is not a fully-fledged promise, but it does have a `.then()`.
query.then(function (doc) {
// use doc
});
// `.exec()` gives you a fully-fledged promise
var promise = query.exec();
assert.ok(promise instanceof require('mpromise'));
Med andra ord, then Funktionen är syntax sugar och inte ett promise det är därför som bind och andra löftesfunktioner fungerar inte.
För att få det att fungera kan du antingen slå in det i ett fullständigt löfte eller använda exec fungerar enligt förslaget i dokumenten