我想在MongoDB中使用promisify。我最后尝试了代码,连接正常,但函数insertOne没有。任何人都可以帮我吗?最好用'.db()。collection()'来解释原因,以及什么是上下文,我应该如何使用以下代码使函数promisify:
a().b().c().d()
这是我的代码,如波纹管。
import "babel-polyfill"
const mongoClient = require('mongodb').MongoClient
const util = require('util')
const chalk = require('chalk')
const url = 'mongodb://localhost:27017'
const dbName = ''
const collName = ''
let connect = util.promisify(mongoClient.connect).bind(mongoClient)
let insertOne = util.promisify(mongoClient.insertOne)
.bind(mongoClient)
const main = async () => {
try {
await connect(url)
insertOne({a100: 1}).db(dbName).collection(collName)
} catch (err) {
console.log(chalk.red(err.toString()))
}
mongoClient.close()
}
main()
MongoDB驱动程序已经返回promises(参见documentation)。你不需要使用util.promisify
。另外,你不要在像db
这样的查询上链接collection
和insertOne
。反过来说。
例如:
client = await mongoClient.connect(url)
client.db(dbName).collection(collName).insertOne({a100: 1})
(注意,如果你使用旧的mongodb节点驱动程序版本2.2,它会稍微不同,因为connect返回一个db对象 - documentation for 2.2)