什么是Node.js中的“完成”回调函数?

时间:2019-06-12 01:43:34

标签: javascript node.js callback async-await

大多数npm软件包始终在其页面中使用“完成”回调函数。我很难理解它。例如:

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

这是我的理解:

“完成”是一个回调函数,因此其任务是保存结果为“ null”和“ user.id”。如果是这样,持有“ null”的意义何在?我们不能只说done(user.id)吗?

如果我的理解是错误的,那么以上代码的解释是什么?

此外,该代码用旧的javascript编写。我们如何用箭头功能或可能的话用async / await在现代javascript中编写它?

我尝试用async / await编写。这是正确的吗?

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

2 个答案:

答案 0 :(得分:0)

这只是一个成功的回调。没什么特别的。

您可以使用分解和箭头功能像这样在ES6中重写它:

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

答案 1 :(得分:0)

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

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

在node.js中,将异步函数中的错误作为当前函数的回调的第一个参数返回来处理异步函数中的错误,这被视为标准做法。如果存在错误,则会向第一个参数传递一个带有所有详细信息的Error对象。否则,第一个参数为null。

因此,done的第一个参数可能是错误,第二个是实际值

docs