相关疑难解决方法(0)

Mongodb节点驱动程序2.0.*与Bluebird 2.9.*promisification

因此,围绕此主题还有一些其他查询,例如: 如何使用bluebird宣传MongoDB本机Javascript驱动程序?

但它似乎没有解决最新版本的驱动程序,这似乎在尝试promisify时有问题.目前我可以通过以下方式MongoClient开展工作:

Promise.promisifyAll(mongodb.MongoClient); // Using .Prototype here fails to promisify

然而,无论我尝试什么收集似乎没有使用*async调用操作,它可能会调用它们,但它们永远不会被解决或拒绝,所以他们只是陷入困境.

历史上在以前的版本中你只会Promise.promisifyAll(mongodb)和你完成,但我不确定如何在新的驱动程序中正确处理它.

以下是使用mongo direct promisification创建的集合的示例输出,connectAsync然后从返回的db中获取集合.一旦我尝试对集合做任何事情,它就会挂起并承诺不会从它返回:

{ s: { pkFactory: { [Function: ObjectID] index: 14727641, createPk: [Function: createPk], createFromTime: [Function: createFromTime], createFromHexString: [Function: createFromHexString], isValid: [Function: isValid], ObjectID: [Circular], ObjectId: [Circular], createPkAsync: [Object], createFromTimeAsync: [Object], createFromHexStringAsync: [Object], isValidAsync: [Object], bindAsync: [Object], toStringAsync: [Object], callAsync: [Object], applyAsync: [Object], lazyAsync: [Object], throttleAsync: [Object], debounceAsync: [Object], delayAsync: [Object], everyAsync: [Object], cancelAsync: [Object], afterAsync: [Object], onceAsync: …

javascript mongodb node.js promise bluebird

9
推荐指数
2
解决办法
3767
查看次数

Mongoose的默认promise库在MEAN堆栈中已弃用

我正在尝试启动MEAN堆栈服务器,但是我收到此错误信息:

Mongoose:不推荐使用mpromise(mongoose的默认承诺库),而是插入自己的promise库:http://mongoosejs.com/docs/promises.html

我试着在这里搜索一些答案,但我找到的答案对我来说不够清楚:

(节点:3341)弃用警告:猫鼬:mpromise

我找到了调用mongoose.connect的文件,但该问题的代码对我不起作用,有人能解释一下它是如何工作的吗?

javascript mongoose mongodb node.js promise

7
推荐指数
1
解决办法
4222
查看次数

是否仍然需要宣传MongoDB驱动程序?

这个问题的答案是否仍然相关:如何使用bluebird宣传MongoDB本机Javascript驱动程序?

我不知道从什么时候开始更新,但是MongoDB的2.0 JS驱动程序在options对象中有一个属性promiseLibrary:http://mongodb.github.io/node-mongodb-native/2.0/api/MongoClient.html

并且大多数方法/函数确实返回了一个承诺,例如Cursor.toArray().

但是,我找不到使用这个新选项的示例,但使用时不会更简单:

MongoClient.connect('mongodb://URL', { promiseLibrary: require('bluebird') });
Run Code Online (Sandbox Code Playgroud)

或者这个定义是错的? - 在哪种情况下,应该如何正确定义?

更新:

代码在io.js上运行,所以我甚至可能不需要指定一个promiseLibrary驱动程序将使用ES6承诺? - 但是,据说蓝鸟的承诺比较慢:

为什么原生ES6比蓝鸟承诺更慢,内存更密集?

Update2: 我添加了bluebird标签 - 如果promisifying真的比使用MongoDB自己的实现更好的话,也许在bluebird上工作的人可以提供更多细节吗?

mongodb node.js promise bluebird

6
推荐指数
1
解决办法
703
查看次数

使用MongoDB的本机ES6承诺

我知道可以使用外部库来宣传 Mongo的Node驱动程序.我很想知道是否可以使用ES6承诺MongoClient.connect,所以我尝试了这个(使用Babel 5.8.23进行转换):

import MongoClient from 'mongodb';

function DbConnection({
  host = 'localhost',
  port = 27017,
  database = 'foo'
}) {
  return new Promise((resolve, reject) => {
    MongoClient.connect(`mongodb://${host}:${port}/${database}`, 
    (err, db) => {
      err ? reject(err) : resolve(db);
    });
  });
}

DbConnection({}).then(
  db => {
    let cursor = db.collection('bar').find();
    console.log(cursor.count());
  },
  err => {
    console.log(err);
  }
);
Run Code Online (Sandbox Code Playgroud)

输出是{Promise <pending>}.与游标有关的任何事情似乎都会产生类似的结果.有没有办法解决这个问题,还是我完全咆哮错误的树?

编辑:节点版本4.1.0.

javascript mongodb node.js es6-promise babeljs

6
推荐指数
1
解决办法
5161
查看次数

mongoDB承诺过早返回

我刚开始尝试在我的Node.js应用程序上实现Promises.现在我正在检查用户和密码是否存在,然后使用mongodb查找它们如果找不到用户它设置了promise.reject()但是它过早地返回了promise并且它仍处于挂起状态.如果有人可以帮助或给我关于如何重构的想法,将不胜感激.

https://gist.github.com/joshbedo/8957056

mongodb node.js promise

2
推荐指数
1
解决办法
3131
查看次数