2014-10-28 5 views
0

У меня есть async.series() вызов функции из другого JavaScript Object:Вызов свойства объекта внутри обратного вызова

main.js

var object1 = require('./object1'); 
var object1 = require('./object2'); 

async.series([ 
    object1.myFunction1, 
    object2.anotherFunction 
]); 

object1.js

module.exports = { 

    function1: function(callback){ 

    async.each(someArray, function(item, cb) { 
     function2(item); 
     }, function(err){ 
      if(err) return callback(err); 
      callback(); 
     }); 
    }, 

    function2:function(item, callback){ 
    //Do something 
    } 
}; 

Этот код не работает, поскольку функция function2 не определена внутри обратного вызова. Я попытался поставить

var refToFunction2 = this.function2 

в начале функции1. Он работает, если мы вызываем непосредственно функцию1, но здесь функция1 вызывается async и по некоторым причинам: this = undefined.

Есть ли чистый способ сделать это?

ответ

1

Вы могли бы настроить ваш файл object1.js следующим образом:

var async = require('async'); 

function function1(callback){ 
    async.each(someArray, function(item, cb) { 
    function2(item); 
    }, function(err){ 
    if(err) return callback(err); 
    callback(); 
    }); 
} 

function function2(item, callback){ 
    //Do something 
} 

module.exports.function1 = function1; 
module.exports.function2 = function2; 

Теперь вы должны заметить, что function1 и function2 определены глобально в файле. Это означает, что они могут быть вызваны внутри друг друга свободно.

+0

Спасибо, я об этом не думал. – SegFault