как решить «эти» проблемы с библиотеками узлов, такими как async и request

Я написал скрипт узла, который получает некоторые данные, запрашивая данные REST API (с помощью запроса библиотеки ). Он состоит из пары таких функций:

var data = { /* object to store all data */ },
function getKloutData() {
  request(url, function() { /* store data */}
}
// and a function for twitter data

Поскольку я хочу сделать кое-что после извлечения всего, я использовал асинхронную библиотеку для запуска всех функций извлечения, например:

async.parallel([ getTwitterData, getKloutData ], function() {
    console.log('done');
});

Все это прекрасно работает, однако я хотел поместить все в шаблон объекта, чтобы я мог получать несколько учетных записей одновременно :

function Fetcher(name) { 
    this.userID = ''
    this.user = { /* data */ }
    this.init();
}
Fetcher.prototype.init = function() {
    async.parallel([ this.getTwitterData, this.getKloutData ], function() {
        console.log('done');
    });
}
Fetcher.prototype.getKloutData = function(callback) {
    request(url, function () { /* store data */ });
};

. Это не работает, потому что асинхронность и запрос изменяют этот контекст. Единственный способ обойти это — связать все, что я передаю, через асинхронный запрос и:

Fetcher.prototype.init = function() {
    async.parallel([ this.getTwitterData.bind(this), this.getKloutData.bind(this) ], function() {
        console.log('done');
    });
}
Fetcher.prototype.getKloutData = function(callback) {
    function saveData() {
        /* store data */
    }


    request(url, saveData.bind(this);
};

Я делаю что-то принципиально неправильное или что-то в этом роде? Я думаю, что возврат к сценарию и разветвление его на дочерние _процессы создают большие накладные расходы.

9
задан Brian Tompsett - 汤莱恩 9 June 2015 в 22:41
поделиться