我在将数据从mongoDB导出到javascript时遇到问题。因此,我在mongoDB中使用promise,并且还使用.toArray((方法来检索数据。我试图在回调中将数据传递给下一个 .then(( 的内容。
这是我的代码:
var MongoClient = require('mongodb').MongoClient;
var assert = require('assert');
var ObjectId = require('mongodb').ObjectID;
var url = 'mongodb://localhost:27017/website';
MongoClient.connect(url)
.then((db, err) => { assert.equal(null, err); return [db, err] })
.then(([db, err]) => {
return [db.collection('goodsList'), db];
})
.then(([collection, db]) => {
function toArr(collection) {
var documents = collection.find({}).toArray( function(err, docs) {
return docs;
})
}
return [toArr(collection), db]
})
.then(([docs, db]) => {
console.log(docs)
console.log(db)
db.close()
})
.catch ((err) => {throw err})
它返回未定义的和"Db"对象。 我知道代码坏了,但我不知道如何解决它。
由于 .toArray
返回一个 promise,您需要重写代码以等待该承诺 - 也不需要在 .then 中使用该函数,如下面的代码所示
var MongoClient = require('mongodb').MongoClient;
var assert = require('assert');
var ObjectId = require('mongodb').ObjectID;
var url = 'mongodb://localhost:27017/website';
MongoClient.connect(url)
.then((db, err) => {
assert.equal(null, err);
return [db, err];
})
.then(([db, err]) => {
return [db.collection('goodsList'), db];
})
.then(([collection, db]) =>
// wait for .toArray to resolve then return [docs, db]
collection.find({}).toArray()
.then(docs => [docs, db])
)
.then(([docs, db]) => {
console.log(docs)
console.log(db)
db.close()
});
代码中的最后一行
.catch ((err) => {throw err}) // no need for this
是多余的,它几乎与根本没有该代码相同!