Затем выполняется перед выполнением запроса - PullRequest
0 голосов
/ 01 июня 2018

У меня была эта проблема вчера, но вместо этого, чтобы спросить об этом, я попросил решение, поэтому я ничего не узнал.У меня есть код, который выглядит следующим образом:

User.findOne({'user.id': author.id}, 'id', function (err, userid) {

  console.log(userid); //(1) executes after (2)
  newCharacter.character.author = userid;

}).then(() => {

  console.log('does it work? '+newCharacter.character.author); //(2) executes before (1): undefined

  newCharacter.save(function(err, character) {
    console.log('Success! ' +character.id);
  });
});

Когда я регистрирую userid в then, он все еще не определен по какой-то причине.Почему это происходит?

1 Ответ

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

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

Что вы, вероятно, хотите сделать, это передать идентификатор пользователя в thenвместо этого.

User.findOne({'user.id': author.id}, 'id'})
  .then(userid => {
    newCharacter.character.author = userid;
    console.log('does it work? '+newCharacter.character.author);
    newCharacter.save(function(err, character) {
      console.log('Success! ' +character.id);
    });
  });

Я нашел этот ресурс чрезвычайно полезным для понимания обещаний: https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html

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