Kam*_*ncy 7 javascript mongodb node.js promise
目前使用节点4.3.2和mongo 2.6.我试图获得一个完整的集合(目前在集合中的三个文档).当我使用这段代码时,我遇到了一个问题.
function checkUpdateTime(last_updated){
var collection = db.collection(last_updated);
collection.insert({a:1});
updateTimes = collection.find({a:1}).toArray();
}
var updateTimes = [];
checkUpdateTime('last_updated');
console.log(updateTimes);
Run Code Online (Sandbox Code Playgroud)
当这段代码是tun时,updateTimes是一个承诺,而不是我希望的数组.目标是编辑数组,然后将其插回到集合中.插入语句有效,但文档的检索根本无法按照我期望的方式运行.我已经尝试了这个代码的很多版本,但没有骰子.
我想这可归结为我想知道为什么要回来的承诺?
rob*_*lep 11
MongoDB驱动程序提供了两个处理异步操作的选项:
当你没有传递回调时,就像你的情况一样,它会返回一个承诺.
所以你需要在这里做出选择.但是,您无法选择的一个选择是"使此代码同步运行".
我更喜欢承诺:
function checkUpdateTime(last_updated){
var collection = db.collection(last_updated);
return collection.insert({ a : 1 }) // also async
.then(function() {
return collection.find({ a : 1 }).toArray();
});
}
checkUpdateTime('last_updated').then(function(updateTimes) {
console.log(updateTimes);
});
Run Code Online (Sandbox Code Playgroud)
你可以总是更加花哨并使用类似的东西Promise.coroutine,这将使你的代码看起来更加同步(即使它不是):
const Promise = require('bluebird');
const MongoClient = require('mongodb').MongoClient;
let checkUpdateTime = Promise.coroutine(function* (db, last_updated){
let collection = db.collection(last_updated);
yield collection.insert({ a : 1 });
return yield collection.find({ a : 1 }).toArray();
});
Promise.coroutine(function *() {
let db = yield MongoClient.connect('mongodb://localhost/test');
let updateTimes = yield checkUpdateTime(db, 'foobar');
console.log(updateTimes);
})();
Run Code Online (Sandbox Code Playgroud)
或者async/await,使用Babel:
const MongoClient = require('mongodb').MongoClient;
async function checkUpdateTime(db, last_updated) {
let collection = db.collection(last_updated);
await collection.insert({ a : 1 });
return await collection.find({ a : 1 }).toArray();
}
(async function() {
let db = await MongoClient.connect('mongodb://localhost/test');
let updateTimes = await checkUpdateTime(db, 'foobar');
console.log(updateTimes);
})();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4517 次 |
| 最近记录: |