2016-10-22 28 views
1

我有這樣的代碼:節點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 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) 
+0

在你的,而不是: 註冊: 'checkIfUserExist', 功能(回調,結果){ 使用: 註冊: 'checkIfUserExist', 功能(ERR,結果)實際上node.js所做的是首先檢查每個函數中的錯誤,然後以回調的形式給出結果,你所做的就像你將回調傳遞給錯誤信息,它會給你一個錯誤信息* * –

回答

1

異步函數,一個預計回調作爲其最後一個參數。這是我的工作代碼。

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)   
    }) 

功能(回調,結果)功能(結果,回調)

請檢查該網址以供參考。 https://caolan.github.io/async/docs.html#auto

+0

仍然有錯誤,請參閱下面的下一條評論。那是什麼意思? –

+0

**在getUserName中。** **在connectToDb中。** error = function(){if(fn === null)throw new Error(「Callback was already called。」); var callFn = fn; fn = null; callFn.apply(this,arguments); } } results = undefined **在checkIfUserExist。** {「getUserName」:「Lem」,「connectToDb」:true} **註冊** {「getUserName」:「Lem」,「connectToDb」:true ,「checkIfUserExist」:false} –

+0

事實證明,在花括號的方向上是一個錯誤。 –

相關問題