Что здесь означают два оператора возврата для обещания JavaScript? - PullRequest
0 голосов
/ 10 октября 2018

Я изучаю javascript и Node.js и наткнулся на этот код.У меня есть user.js, представляющий пользовательскую схему, и server.js, который содержит мой почтовый маршрут.

UserSchema.methods.generateAuthToken = function() {

  return user.save().then(()=> {  //Return Statement 2
    return token;                 //Return Statement 3
  });
};

Я хочу понять, что означают два оператора return при вызове user.save () и в 'then'мы возвращаем токен.Почему нам нужно «вернуть» перед «user.save ()»

Вот «POST route»

user.save().then(()=>{
    return user.generateAuthToken();  //Return Statement 1
  }).then((token) =>{
    res.header('x-auth', token).send(user);
  })

Почему мы возвращаем «user.generateAuthToken ()» вместопросто звонишь?Почему мы используем три оператора возврата, тогда как, согласно моему пониманию, оператор возврата не требуется, поскольку обещания автоматически возвращают что-то в блоке then.Может кто-нибудь объяснить, пожалуйста, поток здесь?Я был бы очень благодарен вам.Спасибо.

Ответы [ 3 ]

0 голосов
/ 10 октября 2018

Почему нам нужно «вернуть» впереди «user.save ()»

Это возвращает обещание, которое разрешает токен.Без возврата мы не смогли бы получить доступ к токену вне функции save.

Почему мы возвращаем user.generateAuthToken () вместо простого вызова?

Опять нам нужен токен.Если мы просто вызываем функцию, сохранение выполняется, но у нас нет токена, когда обещание разрешается (в этом случае оно используется для заголовка ответа).

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

Ваше понимание неверно.Все, что возвращается из обещания, доступно для then, если ничего не возвращено, параметр отсутствует (в данном случае токен).

0 голосов
/ 10 октября 2018

В первой функции user.save() вернет обещание, и, когда вы возвращаете токен в блоке then, равном user.save(), обещание разрешит значение токена.

ВВторая функция, если вы не использовали return до user.generateAuthToken();, она просто выполнит эту функцию, и вы получите результаты user.save() в блоке then.

0 голосов
/ 10 октября 2018

Вы, мой друг, работаете с Обещаниями .. (1-й код), когда вы вызываете user.save (), вы возвращаете Обещание .. функция может или не может успешно завершиться .. У Promises есть функция Promise.prototype.then... первый аргумент - это функция успеха, которая вызывается, когда функция разрешается (реальный термин)

Во 2-м коде ... внутри этой 1-й функции вы вернули еще одно Обещание (все затем возвращает еще одно Обещание)..но только если это разрешит)

Если вам нужно побороть дерьмо из JavaScript, попробуйте поискать в Google Eloquent JavaScript (автор Marijn Haverbecke)

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