代码之家  ›  专栏  ›  技术社区  ›  Yilmaz

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

  •  1
  • Yilmaz  · 技术社区  · 6 年前

    大多数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})
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Medet Tleukabiluly    6 年前
    passport.serializeUser(function(user, done) {
      done(null, user.id);
    });
    

    等同于

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

    在node.js中,通过将异步函数中的错误作为第一个参数返回给当前函数的回调来处理这些错误被认为是标准实践。如果有错误,第一个参数将传递一个包含所有详细信息的错误对象。否则,第一个参数为空。

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

    docs

        2
  •  0
  •   Jack Bashford    6 年前

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

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