【发布时间】:2015-05-21 01:07:46
【问题描述】:
因此,围绕这个主题还有一些其他查询,例如: How can I promisify the MongoDB native Javascript driver using bluebird?
但是它似乎没有解决最新版本的驱动程序,这在尝试承诺时似乎有问题。目前我可以通过以下方式让MongoClient 工作:
Promise.promisifyAll(mongodb.MongoClient); // Using .Prototype here fails to promisify
但是,无论我尝试什么,集合似乎都无法使用 *async 调用进行操作,它可能会调用它们,但它们永远不会得到解决或拒绝,因此它们只是处于不确定状态。
过去,在以前的版本中,您只需 Promise.promisifyAll(mongodb) 就完成了,但我不确定如何在新驱动程序中正确处理此问题。
这是一个使用 mongo 直接承诺 connectAsync 创建的集合的示例输出,然后从返回的数据库中获取集合。一旦我尝试对集合做任何事情,它就会挂起并承诺不会从中返回:
{ 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: [Object],
fillAsync: [Object] },
db:
{ domain: [Object],
_events: {},
_maxListeners: undefined,
s: [Object],
serverConfig: [Getter],
bufferMaxEntries: [Getter],
databaseName: [Getter],
options: [Getter],
native_parser: [Getter],
slaveOk: [Getter],
writeConcern: [Getter] },
topology:
{ domain: [Object],
_events: [Object],
_maxListeners: undefined,
connectTimeoutMS: 500,
s: [Object],
bson: [Getter],
isMasterDoc: [Getter],
poolSize: [Getter],
autoReconnect: [Getter],
host: [Getter],
port: [Getter],
emitOpen: false,
socketTimeoutMS: 0 },
dbName: 'some-db-name',
options: {},
namespace: 'some-namespace',
readPreference: null,
raw: undefined,
slaveOk: false,
serializeFunctions: undefined,
internalHint: null,
collectionHint: null,
name: 'some-collection-name' } }
【问题讨论】:
-
对于其他看到这个的人来说,在 Mongo 2.* 他们似乎改变了从某些方法返回的内容,比如 findAsync 现在似乎返回了一些巨大的模型,而不是我之前得到的文档,所以这个问题是必须迁移逻辑和必须正确承诺之间的中间路径。
标签: javascript node.js mongodb promise bluebird