2011-12-19 16 views
0

これは私に少しのループを投げかけています。私は質問をどのように段階的に行うのか完全にはわからない。私はデータベースからフェッチされ、データベースに書き込まれるいくつかのプロパティを持つオブジェクトを持っています。例は次のようになります。ノード:非同期の性質を扱う

// This is an over simplified example. this._connection() returns a valid DB connection 
var delay = { 
    'time' : function() { 
    this._connection().query('SELECT * FROM delay', function(err, result, fields) { 
     return result.length ? result[0].time : 60; 
    } 
    } 
} 

さて、私はこのコードを使用しようとすると....

console.log('Current Delay:' + delay.time()); 

それは私がMySQLのコールバックはdidnのため、」「未定義」期待している必要がありますように、印刷しますメソッドdelay()が返される前に実行され、コールバック内のreturnは何もしません。

このようなことに対応する方法はありますか?多分私はnode.js/asyncの周りに頭を抱えることができません。

+0

コールバック関数の内部にconsole.logを置くと、それを動作させる方法になると思います –

+0

@Daniel Elliott:例を少し取ったと思いますあまりにも文字通り – Will

答えて

2

内部関数でreturn文が無用であることをコールバック

var delay = { 
    'time' : function(data, cb) { 
    this._connection().query('SELECT * FROM delay', function(err, result, fields) { 
     if (err) { 
     // return early to avoid else 
     return cb(err); 
     } 
     cb(null, result.length ? result[0].time : 60); 
    } 
    } 
} 

delay.time(null, function (err, time) { 
    console.log('Current Delay:' + time); 
}); 

注意と呼ばれています。 returnは、魔法のように外側の機能のreturnを呼び出すことはありません。それは関数の最後にreturn undefined;が実装されているからです

関連する問題