Node.js util Метод Promisify Mongoose - PullRequest
0 голосов
/ 30 ноября 2018

Я сталкивался с блокирующим при попытке пообещать мангусту.Насколько я понимаю, я должен быть в состоянии обещать fn, которые принимают обратные вызовы с ошибкой и параметром, но в этом случае я получаю эту ошибку:

TypeError: this.Queryне является конструктором

код модели:

var mongoose = require('mongoose');
var Schema = mongoose.Schema; 
module.exports = mongoose.model('User', new Schema({ 
    name: String, 
    password: String, 
    admin: Boolean 
}));

код взлома:

var User = require('./app/models/user');
var { promisify } = require('util');
var findUserPromise = promisify(User.findOne);

...

    findUserPromise({ name: req.body.name })
    .then(user => console.log("do something with the user"))
    .catch(err => { console.log("err ", err) });

Любая помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Да, когда ответит @Jim B, мангуст дружелюбен к обещаниям.Вы также можете использовать async и await

const User = require('./app/models/user');

module.export = { 
  userDetails: async (req, res, next) => {
    try {
      const user = await User.findOne({ name: req.body.name });
      console.log(user);
    }
    catch(err) {
      console.log(err);
    }
  }
}
0 голосов
/ 30 ноября 2018

мангуст уже очень многообещающий.Чтобы получить обещание от findOne(), вам просто нужно позвонить .exec():

Вместо

var findUserPromise = promisify(User.findOne);
...

findUserPromise({ name: req.body.name })
    .then(user =>
...

Просто позвоните по номеру .exec():

User.findOne({ name: req.body.name }).exec()
    .then(user =>
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...