Функция Promise ведет себя по-разному в разных сферах
Я написал простую функцию запроса, используя обещание и mongoskin, и хочу протестировать запрос на лету, основываясь на вводимых данных.
Проблема в том, что функция getUser ведет себя по-разному в разных контекстах. Любые идеи о том, почему это происходит?
Вот мой код:
PS: я уже обещал модуль mongoskin
PS2: обратный вызов успешно, сбой просто распечатывать ошибки с помощью console.log ()...
PS3: я использую обещание Bluebird и полный код обновляется
Database = function() {}
Database.prototype = (function() {
/* private fields */
var Promise = require('bluebird');
var Mongo = require('mongoskin');
var db = Mongo.db('mongodb://localhost:27017/mongoapp');
db.bind('user');
/* promisify */
Promise.promisifyAll(Mongo);
return {
constructor: Database,
/* query function */
getUser: function(chs) {
return new Promise(function (resolve, reject) {
var re = { $regex: '^'+chs, $options: 'i' };
db.user.find( { username : re } )
.toArrayAsync()
.then(resolve, reject);
});
}
}
}());
/* use */
var db = new Database();
var success = function(data) {
console.log(data);
console.log('succeeded');
}
var fail = function(err) {
console.log(err);
console.log('fail');
}
// output: correct query result
db.getUser('blah').then(success, fail);
var readline = require('readline');
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
terminal: false
});
rl.on('line', function(cmd) {
console.log('querying ' + cmd);
// output: [TypeError: Object #<Cursor> has no method 'toArrayAsync']
db.getUser('blah').then(success, fail);
});