Настройка asyn c Ожидать порядок функций - PullRequest
1 голос
/ 19 января 2020

У меня есть функции буксировки, оба asyn c. я хочу убедиться, что один выполняется за другим, следующий код находится в asyn c

const user= await User.find({
      _id: req.user.id
    });

const userName= `my user name is ${user.userName}`;
const email= `my email is ${user.email}`;

const {response} = await printUser({userName,email};

Проблема в том, что функция printUser выполняется до того, как я найду пользователя, поэтому значения userName и email не определены .

ПРИМЕЧАНИЕ: следующий код находится в express маршрутизаторе, и функция поиска работает (ретрансляция пользователя)

Ответы [ 3 ]

2 голосов
/ 19 января 2020

Я предполагаю, что все эти строки кода также находятся внутри функции asyn c.

Ваша проблема в том, что find возвращает массив пользователей, а не одного пользователя, измените

const user= await User.find({
      _id: req.user.id
    });

Кому:

const user= await User.findOne({
      _id: req.user.id
    });

Если код находится не внутри функции, а в основном файле, то да, вам придется использовать обратные вызовы.

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

Предполагается, что вы mon goose, который не возвращает обещание для функций запроса (см. Здесь - https://mongoosejs.com/docs/promises.html#queries -are-not-promises ). Вы можете использовать .then или .exec, что вернет правильное обещание. что-то вроде

const user = await (User.find({
      _id: req.user.id
    })).exec();

const userName= `my user name is ${user.userName}`;
const email= `my email is ${user.email}`;

const {response} = await printUser({userName,email};

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

Вам нужно использовать обратные вызовы. Примерно так:

User.find({
      _id: req.user.id
    }, function (user) {
    printUser(user.userName, user.email); 
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...