He escrito un script de nodo que obtiene algunos datos al solicitar datos de REST API (utilizando la solicitud de la biblioteca). Consiste en un par de funciones, así:cómo resolver 'estos' problemas con bibliotecas de nodos como asincronía y solicitud
var data = { /* object to store all data */ },
function getKloutData() {
request(url, function() { /* store data */}
}
// and a function for twitter data
Porque quiero hacer algunas cosas después de ir a buscar toda la he utilizado la asíncrono biblioteca para ejecutar todas las funciones se ha podido recuperar de este modo:
async.parallel([ getTwitterData, getKloutData ], function() {
console.log('done');
});
Este todo funciona bien, sin embargo quería poner todo dentro de un modelo objeto por lo que se ha podido obtener varias cuentas a la vez:
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 */ });
};
esto no funciona porque asíncrono y solicitar cambiar el presente contexto. La única manera de que pudiera llegar a su alrededor es mediante la unión de todo lo que pase por petición asincrónico y:
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);
};
¿Estoy haciendo algo mal o algo básico? Creo que volver al script y bifurcarlo en child_processes crea demasiados gastos generales.
La biblioteca Subrayado tiene una función muy útil llamada 'bindAll' que hace que esto sea menos dolorosa. Y si optas por CoffeeScript, puedes simplemente definir los métodos con la flecha adiposa y no tendrás que hacer ningún enlace explícito en absoluto. –