asyncモジュールで複数のコールバックを使用することについて理解を深めるために、コールバックを使用した複数の操作のNode.js でやるべきことをやめるべき 7 つのことの例を使用してこれを説明し、親エンティティを見つけてから、属する子エンティティを見つけます。親に:
methodA(function(a){
methodB(function(b){
methodC(function(c){
methodD(function(d){
// Final callback code
})
})
})
})
async モジュールを使用すると、 series メソッドを使用して、 Callback Hellが発生する可能性がある複数のメソッドのコードをネストするためのコールバックの使用に対処できます。
シリーズ:
async.series([
function(callback){
// code a
callback(null, 'a')
},
function(callback){
// code b
callback(null, 'b')
},
function(callback){
// code c
callback(null, 'c')
},
function(callback){
// code d
callback(null, 'd')
}],
// optional callback
function(err, results){
// results is ['a', 'b', 'c', 'd']
// final callback code
}
)
または滝:
async.waterfall([
function(callback){
// code a
callback(null, 'a', 'b')
},
function(arg1, arg2, callback){
// arg1 is equals 'a' and arg2 is 'b'
// Code c
callback(null, 'c')
},
function(arg1, callback){
// arg1 is 'c'
// code d
callback(null, 'd');
}], function (err, result) {
// result is 'd'
}
)
例に戻って、非同期ウォーターフォール メソッドを使用して、コードを次のように再構築できます。
async.waterfall([
function(callback) {
// code a
var test = db.get('test');
test.find({}, function(err, docs) {
if(err) callback(err);
console.log(docs); // OUTPUT OK
callback(null, docs);
});
}], function(err, result) {
if(err) callback(err);
console.log(result); // OUTPUT OK
}
])