Функция 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);
});

0 ответов

Другие вопросы по тегам