Обещание и разрешение не работает - PullRequest
0 голосов
/ 05 июня 2018
const { GraphQLServer } = require('graphql-yoga');
const mongoose = require('mongoose');

mongoose.connect("mongodb://localhost/test1");

const Todo = mongoose.model('Todo',{
    text: String,
    complete: Boolean
});


const typeDefs = `
  type Query {
    hello(name: String): String!
  }
  type Todo{
      id: ID!
      text: String!
      complete: Boolean!
  }
  type Mutation{
      createTodo(text:String!): Todo
  }
`

const resolvers = {
  Query: {
    hello: (_, { name }) => `Hello ${name || 'World'}`,
  },
  Mutation:{
      createTodo: async (_,{ text }) => {
          const todo = new Todo({text, complete: false});
          await todo.save();
          return todo;
      }
  }
};

const server = new GraphQLServer({ typeDefs, resolvers })

mongoose.connection.once("open", function() {
    server.start(() => console.log('Server is running on localhost:4000'))
  });

Здравствуйте, я новичок в узлах js и mongoDB.Я пытаюсь запустить свой сервер, но он не запускается.Каждый раз, когда он показывает ошибку, подобную этой:

(node:17896) UnhandledPromiseRejectionWarning: Unhandled promise rejection. 
This error originated either by throwing
inside of an async function without a catch block, or by rejecting a promise 
which was not handled with .catch(). (rejection id: 1)
(node:17896) [DEP0018] DeprecationWarning: Unhandled promise rejections are 
deprecated. In the future, promise rejections that are not handled will 
terminate the Node.js process with a non-zero exit code.

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

1 Ответ

0 голосов
/ 05 июня 2018

Вероятно, ваша функция сохранения выбрасывает стрелку, с которой вы не справляетесь!Вы можете решить эту проблему одним из следующих способов:

GraphQL обрабатывает обещание само по себе, так что это даст вам тот же результат:

createTodo: (_,{ text }) => {
      const todo = new Todo({text, complete: false});
      return todo.save();
}

с использованием try catch даст вам лучшую обработку ошибок:

   createTodo: async (_,{ text }) => {
      const todo = new Todo({text, complete: false});
      try {
           await todo.save();
           return todo;
      } catch(err) {
           \\ do something with error
           console.error('error=>', err);
           return null;
      }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...