REST API データを要求して (ライブラリー要求を使用して) データを取得するノード・スクリプトを作成しました。次のようないくつかの機能で構成されています。
var data = { /* object to store all data */ },
function getKloutData() {
request(url, function() { /* store data */}
}
// and a function for twitter data
すべてをフェッチした後にいくつかのことをしたいので、ライブラリ async を使用してすべてのフェッチ関数を次のように実行しました。
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 */ });
};
async と request が this コンテキストを変更するため、これは機能しません。私がそれを回避できる唯一の方法は、非同期とリクエストを介して渡すすべてをバインドすることです。
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);
};
私は何か基本的な間違ったことをしていますか?スクリプトに戻って child_processes にフォークすると、多くのオーバーヘッドが生じると思います。