Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 承诺函数在不同的范围内表现不同_Javascript_Mongodb_Promise_Mongoskin_Bluebird - Fatal编程技术网

Javascript 承诺函数在不同的范围内表现不同

Javascript 承诺函数在不同的范围内表现不同,javascript,mongodb,promise,mongoskin,bluebird,Javascript,Mongodb,Promise,Mongoskin,Bluebird,我使用promise和mongoskin编写了一个简单的查询函数,我想根据使用输入动态测试查询。 问题在于函数getUser在不同的上下文中表现不同。 你知道为什么会这样吗? 这是我的密码: 附言:我已经承诺了mongoskin模块 PS2:回调成功、失败只是通过控制台打印错误。日志。。。 PS3:我使用蓝鸟承诺&完整代码已更新 Database = function() {} Database.prototype = (function() { /* private fields

我使用promise和mongoskin编写了一个简单的查询函数,我想根据使用输入动态测试查询。 问题在于函数getUser在不同的上下文中表现不同。 你知道为什么会这样吗? 这是我的密码: 附言:我已经承诺了mongoskin模块 PS2:回调成功、失败只是通过控制台打印错误。日志。。。 PS3:我使用蓝鸟承诺&完整代码已更新

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);
});

向我们展示您正在使用的promise库以及您是如何实现Mongoskin的您确定要调用相同的db.getUser函数吗?给我们看看全部代码。我用的是蓝鸟。代码更新。嗯,这真是奇怪,它第一次工作…请不要使用return new Promisefunction..{somePromiseReturning.thenresolve,reject;}这是一个已知的反模式。只需返回完全相同的结果。