¿Cómo asegurar "esto" correcto con Promise.promisify?
Estoy tratando de refactorizar mi servidor nodejs usando promesas con la biblioteca Bluebird, pero estoy atrapado en un problema simple.
Después de obtener los usuarios de mi base de datos, quiero enumerar todas las clases de notificación asociadas con este usuario:
Mala manera (trabajando ...)
adapter.getUsers(function(users){
users.rows.forEach(function(item){
user = item.username;
adapter.getNotifications(user, function(notificationList){
console.log(notificationList);
})
});
});
Forma tentativa elegante (no funciona ...)
var getNotifications = Promise.promisify(adapter.getNotifications);
adapter.getUsers().then(function(users) {
users.rows.forEach(function(item){
var dbUser = "sigalei/" + item.value.name;
console.log(dbUser);
return getNotifications(dbUser);
});
}).then(function(result){
console.log(result);
console.log("NOTIFICATIONLIST");
});
Sin embargo, cuando ejecuto este código, aparece este error dentro de mi método getNotification:
Rechazo no controlado TypeError: no se puede leer la propiedad 'nano' de undefined en Adapter.getNotifications (/Users/DaniloOliveira/Workspace/sigalei-api/api/tools/couchdb-adapter.js:387:30) en tryCatcher (/ Users / DaniloOliveira / Espacio de trabajo / sigalei-api / node_modules / bluebird / js / main / util.js: 26: 23)
EDITARDespués de los preciosos comentarios del usuario 2864740, noté que el error está relacionado con algún problema de alcance. Entonces, ¿por qué después de usar el método promisify, el método no obtieneNotifications reconoce la variable env "this"?
var Adapter = module.exports = function(config) {
this.nano = require('nano')({
url: url,
request_defaults: config.request_defaults
});
};
Adapter.prototype.getNotifications = function(userDb, done) {
var that = this;
console.log(that);
var userDbInstance = that.nano.use(userDb);
userDbInstance.view('_notificacao', 'lista',
{start_key: "[false]", end_key: "[false,{}]"},
function(err, body) {
if(err){ done(err); }
done(body);
});
};