mongoose:Query#exec的目的是什么?

Mongoose的Query#exec方法表示它执行查询并返回一个Promise对象。 我不明白的是为什么这是必需的,因为已经有一个查询#然后方法。

具体例子:

考虑一些简单的模型

var Foo = mongoose.model("Foo", {name: String}); 

会有什么区别?

 Foo.find().then( function(res){ /* .. */ }, function(err) { /* .. */ } ); 

 Foo.find().exec().then( function(res){ /* .. */ }, function(err) { /* .. */ } ); 

两者都似乎正常工作。

query.exec(function(err, result))永远存在mongoose中。 它允许传递callback,并在新版本的mongoose也返回一个承诺。 很多代码(旧的和新的)仍然使用callback,所以这可能比.then()更常用。

then()方法在后来被引入,当mongoose被promisified – 但旧的代码不应该被破坏,所以exec()将永远留下我猜。