Mon goose .findByIdAndUpdate () консоль регистрирует возврат, но не может назначить свойству - PullRequest
0 голосов
/ 16 января 2020

Я написал эту функцию для обновления данных в MongoDB:

const Sequence = require('../models/sequenceSchema');

module.exports.genNumber = function () {
    let doc = Sequence.findByIdAndUpdate(
        {_id: "5e1f72951c9d440000afce53"},
        {$inc:{sequence_value: 1}},
        {new: true},
        function(err,result){
            if(err) return console.log(err)


            return result.sequence_value;
        }
    )
};

В разрешении мутации я написал этот код:

const graphql = require('graphql');
const functions = require('../modules/functions');

const Mutation = new GraphqlObjectType({
(..)
resolve(parent,args){
                let ticket = new Ticket({
                    name: args.name,
                    number: functions.genNumber(),                        
                    opendate: Date(),
                    product: args.product,
                    priority: args.priority,
                    status: args.status,
                    deadline: calcs.deadline(Date(),args.priority),
                    userid: args.userid
                });

Моя проблема в том, что функция findByIdAndUpdate() обновить значение на MongoDB, но не присваивать свойству number:. Если я возвращаю result в журнале консоли, он показывает отлично, я не понимаю, что происходит. Я использую Graphql / Mongoose / MongoDB

1 Ответ

0 голосов
/ 16 января 2020

Это происходит потому, что:

  1. Функция genNumber ничего не возвращает
  2. Если функция genNumber возвращает что-то, это будет обещание, и обещание должно необходимо разрешить перед использованием при создании заявки.

Этот обновленный фрагмент кода должен работать:

const Sequence = require('../models/sequenceSchema');

module.exports.genNumber = function () {
  // Notice the return statement below
  return new Promise((resolve, reject) => {
    Sequence.findByIdAndUpdate(
      { _id: "5e1f72951c9d440000afce53" },
      { $inc: { sequence_value: 1 } },
      { new: true },
      function (err, result) {
        if (err) {
          console.log(err);
          return reject(err);
        }
        console.log('Result: ', result);
        return resolve(result.sequence_value);
      }
    )
  })
};

=

const Mutation = new GraphqlObjectType({
  // (..)
  // Notice the resolve method becomes an asynchronous
  resolve: async (parent, args) => {
    // Notice the await on functions.genNumber call
    const number = await functions.genNumber();
    let ticket = new Ticket({
      name: args.name,
      number: number,
      opendate: Date(),
      product: args.product,
      priority: args.priority,
      status: args.status,
      deadline: calcs.deadline(Date(), args.priority),
      userid: args.userid
    });
  }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...