2014-01-09 5 views
7

Ich versuche, den Callback-Parameter zu einer Funktion optional zu machen. Wenn ein Callback übergeben wird, senden Sie den Wert an die Callback-Funktion, ansonsten geben Sie einfach den Wert zurück. Wenn ich den Callback weglasse, bekomme ich undefined zurück.Callback (Obj) ausführen, wenn Rückruf vorhanden ist Sonst Rückgabeobjekt

getByUsername = function(user_name, cb){ 
    async.waterfall([ 
     //Acquire SQL connection from pool 
     function(callback){ 
      sql_pool.acquire(function(err, connection){ 
       callback(err, connection); 
      }); 
     }, 
     //Verify credentials against database 
     function(connection, callback){ 
      var sql = 'SELECT * FROM ?? WHERE ?? = ?'; 
      var inserts = ['users','user_name', user_name]; 
      sql = mysql.format(sql,inserts); 
      connection.query(sql, function(err, results) { 
       sql_pool.release(connection); 
       callback(err, results); 
      }); 
     }, 
     //Create user object 
     function(results, callback) { 
      if(results.length < 1){ 
       if(cb){ 
        cb(null); 
       } else { 
        return null; 
       } 
      }else { 
       var thisUser = new User(results[0]); 
       if(cb){ 
        cb(thisUser); 
       } else { 
        return thisUser; 
       } 
      } 
     }], function (err, results) { 
      throw new Error('errrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrroooooorrrrrrrr'); 
     } 
    ) 
} 
+3

Also, was ist die Frage? –

+0

haha. Es tut uns leid. Es funktioniert nicht richtig. Ich bekomme Rückruf nicht definiert. –

+1

Es sollte etwas offensichtlich sein. Sehen Sie sich den Namen der Argumente an. Warum würden Sie den Rückruf auch anrufen, wenn er null ist? –

Antwort

16

Sie könnten einfach so überprüfen:

if(cb && typeof cb === "function") { 
    cb(num + 1); 
} 

Hinweis: Stellen Sie sicher, dass Sie tatsächlich cb mit Ihrer Callback-Funktion aufrufen und nicht callback;)

+3

'&& typeof cb ===" function ")' wenn Sie die Art der Sicherheit überprüfen möchten – zero298

+0

Danke zero298. Ich fügte das dem Zustand hinzu. BTW, keine Notwendigkeit für '===' seit 'typeof' Operator immer" zurückgibt "Zeichenfolge oder Null, so einfacher Vergleich für' "Funktion" 'würde gut funktionieren. – Floremin

+0

Danke! Ich werde diese Vorschläge definitiv in meinen Code einbauen. Ich habe mein Beispiel aktualisiert, um mein tatsächlicher Code zu sein, da mein vorheriges Beispiel gut war, ein Fehler (Lektion gelernt). Nachdem ich meine Fehler behoben hatte, konnte ich das vorherige Beispiel zum Laufen bringen, aber ich kann meine Fehler nicht sehen. Danke noch einmal! –