Как вернуть объект за пределы mongoose .save (). Then ()? - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть мутация GraphQL, которая пытается сохранить объект в коллекцию MongoDB с помощью Mongoose:

Mutation: {
    addPost: (parent, args) => {
      let output = {};
      const newpost = new dbPost({
        _id: new mongoose.Types.ObjectId(),
        title: args.title,
        content: args.content,
        author: {
          id: args.authorid,
          first_name: args.authorfirstname,
          last_name: args.authorlastname,
        }
      });
      newpost.save().then((result) => {
        output = result;
      });
      return output // returns null, need result!
    },
  }

Скрипт работает просто отлично, так как в нем успешно сохраняется объект (переданный ему через ).args ) в коллекцию.Однако я не могу вернуть объект, возвращенный изнутри .then () для дальнейшей обработки.В GraphiQL ответ является нулевым объектом.Есть ли способ, я мог бы вернуть значение результат за пределами .then () ?

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

@Mehranaz.sa ответ правильно!

Но GraphQL разрешает Promise, так что вы можете просто написать это:

Mutation: {
    addPost: (parent, args) => {
      let output = {};
      const newpost = new dbPost({
        title: args.title,
        content: args.content,
        author: {
          id: args.authorid,
          first_name: args.authorfirstname,
          last_name: args.authorlastname,
        }
      });
      return newpost.save();
    },
  }

Это тоже отлично работает!PS: вам не нужно указывать _id при использовании ObjectId:)

0 голосов
/ 16 сентября 2018

вы можете попробовать использовать async await следующим образом:

  Mutation: {
      addPost: async (parent, args) => {
        let output = {};
        const newpost = new dbPost({
          _id: new mongoose.Types.ObjectId(),
          title: args.title,
          content: args.content,
          author: {
            id: args.authorid,
            first_name: args.authorfirstname,
            last_name: args.authorlastname,
          }
        });
        output = await newpost.save();
        return output 
      },
    }

тогда откуда вы вызываете addPost, называйте это как: await Mutation.addPost

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...