Итак, есть несколько других запросов по этой теме, таких как: bluebird">Как я могу обещать родной Javascript-драйвер MongoDB с помощью 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' } }