Como garantir "isso" correto com Promise.promisify?
Estou tentando refatar meu servidor nodejs usando promessas na biblioteca Bluebird, mas estou com um problema simples.
Depois de obter os usuários do meu banco de dados, desejo listar todas as classes de notificação associadas a esse usuário:
Bad Way (trabalhando ...)
adapter.getUsers(function(users){
users.rows.forEach(function(item){
user = item.username;
adapter.getNotifications(user, function(notificationList){
console.log(notificationList);
})
});
});
Maneira Tentativa Elegante (não está funcionando ...)
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");
});
No entanto, quando executo esse código, recebo esse erro dentro do meu método getNotification:
Rejeição não tratada TypeError: Não é possível ler a propriedade 'nano' de undefined em Adapter.getNotifications (/Users/DaniloOliveira/Workspace/sigalei-api/api/tools/couchdb-adapter.js:387:30) em tryCatcher (/ Users / DaniloOliveira / Área de trabalho / sigalei-api / node_modules / bluebird / js / main / util.js: 26: 23)
EDITARApós os preciosos comentários do usuário2864740, notei que o erro está relacionado a algum problema de escopo. Então, por que, depois de usar o método promisify, o método não recebeNotificações reconhece a variável 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);
});
};