passport.js和process.nextTick在策略中

我正在面对nodeJS中的新东西: process.nextTick

在passport.js的一些策略代码示例中,我们可以看到

 passport.use(new LocalStrategy( function (username, password, done) { // asynchronous verification, for effect... process.nextTick(function () { findByUsername(username, function (err, user) { // ... bcrypt.compare(password, user.password, function (err, res) { // ... }); }) }); } )); 

但是在官方文档中却没有使用。 ( http://passportjs.org/guide/username-password/ )

我所理解的是,应该使用process.nextTick推迟同步堆栈不阻止事件。 但是在这个策略代码中,没有事件。

这样做的好处是什么?

只是在示例中显示可以进行asynchronousauthentication。 在大多数情况下,你会查询一个数据库,所以它本质上是asynchronous的。 然而,这个例子只是一组硬编码的用户,所以nextTick调用是为了模拟一个asynchronous函数。

100%的ES6工作,所以你可以删除nextTick
我在服务器端使用babel和webpack如此:

从“护照”import护照;

 const GoogleStrategy = require('passport-google-oauth').OAuth2Strategy; const manipulateUser = async (User, profile, done, token) => { try { const user = await User.findOne({ googleId: profile.id }); if (user) { user.accessToken = token; await user.save(); return done(null, user); } const newUser = new User(); newUser.googleId = profile.id; newUser.name = profile.displayName; newUser.avatar = profile.photos[0].value; newUser.accessToken = token; profile.emails.forEach((email) => { newUser.emails.push(email.value); }); await newUser.save(); return done(null, newUser); } catch (err) { console.log('err at manipulateUser passport', err); return done(err); } }; const strategy = (User, config) => new GoogleStrategy({ clientID: config.googleAuth.clientID, clientSecret: config.googleAuth.clientSecret, callbackURL: config.googleAuth.callbackURL, }, async (token, refreshToken, profile, done) => manipulateUser(User, profile, done, token)); export const setup = (User, config) => { passport.use(strategy(User, config)); };