2015-12-14 31 views
0

是否有任何替代async.applyEachSeriesasync.applyEachSeries不能引用'this'不像async.series

這是一段代碼,當與applyEachSeries一起使用時,代碼無法參考this。但是,像往常一樣工作async.series

this.c就是我注重的地方:

var LModel = function(){}; 
LModel.prototype = { 

    a: function (req, done) { 
     console.log(' FUNCTION A'); 
     done(null,'result A'); 
    }, 
    b: function (req, done) { 
     console.log('THIS==', this.c); //THIS== undefined for applyEachSeries 
     console.log(' FUNCTION B'); 
     this.c(req, function(err, res){console.log('c CALLED!'); console.log(res);}); 

     done(null,'result B'); 
    }, 
    c: function (req, callback) { 
     console.log(' FUNCTION C'); 
     callback(null,'result C'); 
    } 
}; 

module.exports = LModel; 


var lanM = new LModel(); 

async.applyEachSeries([lanM.a, lanM.b],{},function(err, res){console.log('NEVER EXECUTED!');}) 

async.series([ 
     function(callback){ 
      // do some stuff ... 
      lanM.a({}, function(err, res){}); 

      callback(null, 'one'); 
     }, 
     function(callback){ 
      // do some more stuff ... 
      lanM.b({}, function(err, res){}); 
      callback(null, 'two'); 
     } 
    ], 
    // optional callback 
    function(err, results){ 
     // results is now equal to ['one', 'two'] 
    }); 

回答

1

你可以把它用在你的lanM.b方法這樣使用bind工作:

async.applyEachSeries([lanM.a, lanM.b.bind(lanM)], {}, 
    function(err, res) { 
    console.log('NEVER EXECUTED!'); 
}) 
相關問題