CNode

问一个问题 mongoose exec() 方法貌似没有必要了?

问答
Lliangtongzhuo发布于8 年前最后回复8 年前6 回复8500 浏览0 收藏

下面两行现在有区别吗? 5.0.8 版本

Player.find({}).exec()
Player.find({})

加不加 .exec() 都会调用 then 方法? 查看资料都说 exec() 返回 Promise ?但是不加 exec() 也调用 then() 里面的方法。

查看回复

回复 (6)

A
a631807682#1·8 年前

有区别的,一个是返回data一个是返回query,比如你想写一个统一的分页方法,就需要把查询的query传进去分页方法,通过附加其他查询来实现。

L
liangtongzhuo#2·8 年前
引用 a631807682有区别的,一个是返回data一个是返回query,比如你想写一个统一的分页方法,就需要把查询的query传进去分页方法,通过附加其他查询来实现。

@a631807682 通过打印上面两个函数返回值,一个 query ,一个 Promise。

但是

Player.find({}).then(data=>{
    console.log(data)  
  })
Player.find({}).exec().then(data=>{
    console.log(data)  
})

这俩都可以,都能得到数据

应该是没有 callback 函数就会返回 promise if callback == null, then will return a promise

L
liangtongzhuo#3·8 年前
引用 a631807682有区别的,一个是返回data一个是返回query,比如你想写一个统一的分页方法,就需要把查询的query传进去分页方法,通过附加其他查询来实现。

@a631807682 mongoose 文档里明确写了

Model.find()
Parameters
[callback] «Function»
Returns:
«Query»
Finds documents

The conditions are cast to their respective SchemaTypes before the command is sent.

这个 Query 为啥可以接上 promsie ?

L
liangtongzhuo#4·8 年前

结论确实 exec(); 没什么必要添加了。

A
a631807682#6·8 年前

没用过,但不排除有用,因为query可以被更改,而exec只能得到结果。就像js对象也有可更改和不可更改的属性的区分,比如你提供一个sdk供人使用,而且返回的是query,并不确定被改成什么。

参与回复
登录后即可参与回复。登录