(ライブラリリクエストを使用して)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);
};
私が間違っている基本的なものか何かをやっていますか?私はスクリプトに戻って、child_processesにそれをフォークすると、かなりオーバーヘッドになると思います。
を下線ライブラリは、これはそれほど苦痛になり、 'bindAll'と呼ばれる便利な機能を持っています。 CoffeeScriptを選択した場合は、太い矢印でメソッドを定義するだけで、明示的にバインディングする必要はありません。 –