使用承诺时重复的 Mongoose 日志条目

Duplicate Mongoose log entry when using promises

我已经在 mongoose 中实现了 promises,但是我收到了重复的日志条目,我不确定它是否是预期的输出,如果是,为什么?

我 运行 下面的函数,在 if 语句中只有一次。

const isUsernameTaken = (username) => {
  let isTaken;
  const promise = User.find({username: username}, (err, doc) => {
    if(doc.length) {
      isTaken = true;
    } else {
      isTaken = false;
    }
  }).exec();
  promise.then(() => {
    return isTaken;
  });
}

mongoose 调试输出

Mongoose: users.find({username: 'test'}, {projection: {}})
Mongoose: users.find({username: 'test'}, {projection: {}})
true

与我的预期相比

Mongoose: users.find({username: 'test'}, {projection: {}})
true

似乎使用 find 的回调以及调用 exec() 发送了两次请求...将回调放在 promise.then(...) 中应该可以解决这个问题:

const isUsernameTaken = (username) => {
  User.find({username: username})
    .exec()
    .then(doc => doc ? true : false)
    .catch(err => console.log(err));
}