我编写了一个节点脚本,它通过请求 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 会产生很多开销。