Почему мой распознаватель не возвращается в первый раз? - PullRequest
0 голосов
/ 26 июня 2018

Я строю сервер GraphQL и получаю странное поведение с одним из моих преобразователей. Когда я запускаю мутацию в первый раз, она возвращает ноль, но когда я использую логирование, консоль ясно показывает, что объект был возвращен Mongoose, прежде чем я попытаюсь вернуть его.

Резольвер:

setView(error, { name, author, data }) {
    if (error) return console.error(error);
    console.log(`Creating new view named: ${name}`);
    let newView = new View({ name: name, author: author, data: data });
    newView.save();
    console.log("View created");
    console.log(View.findOne({ name: name }));
    return View.findOne({ name: name });
}

Журнал консоли:

Создание нового представления с именем: testView5

Вид создан

model.Query {_mongooseOptions: Object, mongooseCollection: NativeCollection, model:, схема: Schema, op: "findOne",…}

Создание нового представления с именем: testView5

Вид создан

model.Query {_mongooseOptions: Object, mongooseCollection: NativeCollection, model:, схема: Schema, op: "findOne",…}

Мутация:

mutation {
  setView(
    name: "testView7",
    author: "Bob", 
    data: [
        "First Column", 
        "Second Column", 
        "Third Column"
    ]) {
    name
  }
}

Первоначальный доход:

{
  "data": {
    "setView": null
  }
}

Последующее возвращение (снова та же мутация):

{
  "data": {
    "setView": {
      "name": "testView7"
    }
  }
}

В настоящее время мне интересно, связано ли это с тем, как я возвращаюсь с помощью findOne, но я не могу понять, что это может быть, если это сработает во второй раз.

1 Ответ

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

Джо Уорнер был прав, когда сказал, что сохранение асинхронно. Решение состояло в том, чтобы заставить функцию ждать обещание сохранения, как показано ниже:

    async setView(error, { name, author, data }) {
        if (error) return console.error(error);
        console.log(`Creating new view named: ${name}`);
        let newView = new View({ name: name, author: author, data: data });
        var result = await newView.save();
        console.log(`Created view: ${result}`);
        return result;
    }
...