Node.js Node async.js:回调不是函数错误吗?

Node.js Node async.js:回调不是函数错误吗?,node.js,async.js,Node.js,Async.js,我有以下代码: async = require('async') async.auto({ getUserName: function(callback) { console.log('**In getUserName.**') callback(null, 'Lem') }, connectToDb: function(callback) { console.log('**In connectToDb.**') var co

我有以下代码:

async = require('async')

async.auto({
   getUserName: function(callback) {
      console.log('**In getUserName.**')
      callback(null, 'Lem')
   },

   connectToDb: function(callback) {
      console.log('**In connectToDb.**')
      var connected = true
      if(connected) {
        callback(null, connected)
      } else {
        callback('Error connecting to DB.', null)
      }
   },

   checkIfUserExist: [
      'getUserName',
      'connectToDb',
      function(callback, results) {
         console.log('**In checkIfUserExist.**',          
            JSON.stringify(results))
         var userExist = false
         if(userExist) {
            callback('User exist in DB.')
         } else {
            setTimeout(
               function() {
                  callback(null, userExist);
               },
               1000
            );
         }
      }
   ],

   signup: [
      'checkIfUserExist',
      function(callback, results) {
         console.log('**In signup**', JSON.stringify(results))
         var userName = results.getUserName
         var isDbConnected = results.connectToDb
         var userExist = result.checkIfUserExist

        if(userName && isDbConnected && !userExist) {
           callback(null, 
             {'status': '200', 'msg': 'Successfully signed up user'})
       } else {
          callback('Error signing up user.', null)
       }
    }
  ]
 },
 function(error, results) {
    console.log('error = ', error)
    console.log('results = ', results)

})
为什么我会遇到此错误:

**In getUserName.**
**In connectToDb.**
error =  function () {
    if (fn === null) throw new Error("Callback was already called.");
        var callFn = fn;
        fn = null;
    callFn.apply(this, arguments);
}
results =  undefined
**In checkIfUserExist.** undefined
^[[A/home/lem/js/async/asyncAuto.js:30
        callback(null, userExist);
        ^

TypeError: callback is not a function
   at Timeout._onTimeout (/home/lem/js/async/asyncAuto.js:30:13)
   at ontimeout (timers.js:365:14)
   at tryOnTimeout (timers.js:237:5)
   at Timer.listOnTimeout (timers.js:207:5)

异步函数,期望回调作为其最后一个参数。这是我的工作代码

    var async = require('async');
         async.auto({
           getUserName: function(callback) {
            console.log('**In getUserName.**')
            callback(null, 'Lem')
           },

         connectToDb: function(callback) {
          console.log('**In connectToDb.**')
          var connected = true
          if(connected) {
            callback(null, connected)
          } else {
            callback('Error connecting to DB.', null)
          }
       },
       checkIfUserExist: [
          'getUserName',
          'connectToDb',
          function(results, callback) {
             console.log('**In checkIfUserExist.**',          
                JSON.stringify(results))
             var userExist = false
             if(userExist) {
                callback('User exist in DB.')
             } else {               
                setTimeout(function() {                 
                      callback(null, userExist);
               },1000);
             }
          }
       ],

       signup: [
          'checkIfUserExist',
          function(results, callback) {
             console.log('**In signup**', JSON.stringify(results))
             var userName = results.getUserName
             var isDbConnected = results.connectToDb
             var userExist = results.checkIfUserExist

            if(userName && isDbConnected && !userExist) {
               callback(null, 
                 {'status': '200', 'msg': 'Successfully signed up user'})
           } else {
              callback('Error signing up user.', null)
           }
        }
     ],
},
     function(error, results) {
        console.log('error = ', error)
        console.log('results = ', results)         
    })
函数(回调,结果)应该是函数(结果,回调)

请检查此url以供参考。

在v2中,async的
auto
方法发生了突破性的变化,您似乎在使用它。

自动任务函数现在总是将回调作为最后一个参数。如果任务具有依赖项,则结果对象将作为第一个参数传递。要迁移旧的任务函数,请使用u.flip包装它们


在您的中,而不是:注册:['checkIfUserExist',函数(回调,结果){使用:注册:['checkIfUserExist',函数(err,结果){node.js实际上做的是首先检查每个函数中的错误,然后以回调的形式给出结果。您所做的就像是将回调作为错误传递给它,它会向您发送错误消息。仍然有错误请参见下面的注释。这意味着什么?在getUserName.in connectToDb.error=function(){if(fn==null)抛出新错误(“已调用回调”);var callFn=fn;fn=null;callFn.apply(这是参数);}results=checkIfUserExist中未定义。{“getUserName”:“Lem”,“connectToDb”:true}在注册{“getUserName”:“Lem”,“connectToDb”:true,“checkIfUserExist”:false}结果是花括号的方向错误。是的,花括号丢失了,我已经更新了代码,现在一切都好了。