在下面的控制stream中使用响应之前,如何等待节点/快速应用程序中mongo findOne查询的响应
我是新来的节点,也是JavaScript的callback。
我试图检查一个帐户是否存在在mongo中,然后'保存',如果没有,并返回一个错误,如果是的话。
我目前正在试图找出我的快速应用程序之外。 这是我的..
var MongoClient = require('mongodb')。MongoClient;
MongoClient.connect('mongodb://localhost:27017/main', function (err, db) { if(err) throw err; var query = { name : "www.website.com"} findOne(db, query, function (doc) { if(doc) { console.log('account exists'); } else { console.log('good to go'); } console.dir(doc); }); }); var findOne = function (db, query, callback) { db.collection('accounts').findOne(query, function (err, doc) { if(err) throw err; db.close(); callback(); }); }
与console.dir(doc);
上面返回undefined
。 如何在使用callback至console.log
之前等待findOne返回或保存帐户?
你得到未定义的原因是因为当你打电话给你的callback你没有通过它的文档。 该行应该看起来像callback(doc)。
以下是您的代码的更新版本,并提供一些build议:
MongoClient.connect('mongodb://localhost:27017/main', function (err, db) { if(err) throw err; var query = { name : "www.website.com"} findOne(db, query, function (err, doc) { if(err) { // something went wrong console.log(err); return; } if(doc) { console.log('account exists'); console.dir(doc); } else { console.log('good to go'); } }); }); var findOne = function (db, query, callback) { db.collection('accounts').findOne(query, function (err, doc) { db.close(); if(err) { // don't use throw when in async code // the convention is to call your callback with the error // as the first argument (notice that I added an argument // to the definition of your callback above) callback(err); } else { // call your callback with no error and the data callback(null, doc); } }); }
- 什么是meteor的线性执行模型?
- 将附加parameter passing给Node js中fs.readFile的callback函数
- DeprecationWarning:不build议调用不带callback的asynchronous函数
- 我如何recursion和asynchronous构build一个未知大小的树?
- 在加载Express 4.x之前启动数据库连接
- node.js让大量的tcp客户端大失所望
- 当所有的任务完成后,async.parallel仍然会调用最后的callback函数,如果其中任何一个得到错误?
- NodeJS读取和写入线程/工人的CSV
- 使用setTimeout时node.js处理stream反压