Что такое "готовая" функция обратного вызова в Node.js? - PullRequest
2 голосов
/ 12 июня 2019

Большинство пакетов npm всегда используют функцию обратного вызова done на своей странице. Мне трудно это понять. Например:

passport.serializeUser(function(user, done) {
  done(null, user.id);
});

Это мое понимание:

«done» - это функция обратного вызова, поэтому ее миссия состоит в том, чтобы удерживать результат «null» и «user.id». Если так, то какой смысл держать «ноль»? Разве мы не можем просто сказать done(user.id)?

Если мое понимание неверно, какова интерпретация приведенного выше кода?

Кроме того, этот код написан на старом javascript. Как мы можем написать это в современном javascript с функцией стрелки или, если возможно, с async / await?

Я пытаюсь написать с помощью async / await. Это правильно?

passport.serializeUser(async (user)=>{
return await user.id})

Ответы [ 2 ]

0 голосов
/ 12 июня 2019
passport.serializeUser(function(user, done) {
  done(null, user.id);
});

так же, как

passport.serializeUser(function(user, callback) {
  callback(null, user.id);
});

В node.js считается стандартной практикой обрабатывать ошибки в асинхронных функциях, возвращая их в качестве первого аргумента для обратного вызова текущей функции. Если есть ошибка, первому параметру передается объект Error со всеми подробностями. В противном случае первый параметр имеет значение null.

По этой причине первый аргумент done является возможной ошибкой, второй - фактическим значением

1012 * Docs *

0 голосов
/ 12 июня 2019

Это просто успешный обратный вызов. Ничего особенного.

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

passport.serializeUser(({ id }, done) => done(null, id));
...