2014-01-09 6 views
7

私がやっていることは、オプションのコールバックパラメータをオプションにすることです。コールバックが渡された場合は、その値をコールバック関数に送るだけで、値を返すだけです。私がコールバックを省略した場合、私は未定義になります。コールバックが存在する場合にコールバック(obj)を実行するその他のオブジェクトを返す場合

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

をそこで質問は何ですか? –

+0

笑ごめんなさい。それは正しく動作しません。コールバックが定義されていません。 –

+1

これはやや明白です。引数の名前を見てください。また、nullの場合、なぜコールバックを呼び出すのでしょうか? –

答えて

16

あなたはこのようにチェックすることができ:

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

注:あなたが実際にあなたのコールバック関数ではなくcallbackを呼び出すためにcbを使用していることを確認してください;)

+3

'&& typeof cb ===" function ")'型安全性を再確認したい場合 – zero298

+0

ありがとうございますzero298。私はそれを条件に加えました。ところで、 'typeof'演算子は常に文字列を返すので、' === 'の必要はありません。ヌルなので、単純な比較は機能します。 – Floremin

+0

ありがとう!私はこれらの提案を私のコードに確実に取り入れます。以前の例がうまくいて、失敗(教訓を学んだこと)したので、私の例を実際のコードに更新しました。前の例でエラーを修正した後に動作させることができましたが、これは私の誤りを容易に見ることはできません。再度、感謝します! –

関連する問題