【发布时间】:2014-10-08 22:08:33
【问题描述】:
所以我有一个 mongodb 设置,里面有一些测试数据。我希望能够证明 mongo shell 运行我们的脚本同步,节点运行我们的脚本异步。我已经设置了以下两个 js 文件,这些文件是我在 Mongo 大学课程中获得的。这实际上更像是一个测试,以便我了解发生了什么。我将 cd 进入使用 npm 安装 mongo 的目录以及脚本所在的目录。然后我会调用这些脚本,我会使用
调用mongoshell.js
>mongo mongoshell.js
和 nodeshell.js 使用:
>node nodeshell.js
这是两个脚本:
mongoshell.js
//Find one document in our collection
var doc = db.allClasses.findOne();
print('before');
//Print the result
printjson(doc);
print('after');
我在 shell 中运行它得到的结果是:
所以我在这里的想法是打印命令会比对 mongo 的查询更快地返回。通过在打印之前和之后放置并且所有内容都以正确的顺序出现,它必须是同步的。
接下来我有 nodeshell.js
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db){
if (err) throw err;
//Find one document in our collection
db.collection('allClasses').findOne({}, function(err, doc){
//Print the result
console.dir(doc);
//close the DB
db.close();
});
});
setTimeout(function(){
console.dir("10 Milliseconds!");
}, 10);
setTimeout(function(){
console.dir("100 Milliseconds!");
}, 100);
控制台的结果是:
我的想法是我已经确定 mongo 通常需要 10 到 100 毫秒来返回我的数据。如果我放置了两个超时的打印命令,一个在 10 毫秒,一个在 100 毫秒,一个应该在返回 json 之前触发,因为节点外壳是异步的,另一个应该在之后触发..
我的问题: 这个乡巴佬测试是否真的表明每个贝壳都是它们的样子。同步和异步?如果是,很酷,如果不是,为什么?
【问题讨论】:
-
这不是很难回答吗?至少它必须显示节点外壳是异步的,因为我的 json 在我的两个打印命令之间返回。对吗?我是 Node 和 Mongo 的新手,只是想确保我了解正在发生的事情......
-
这个问题似乎是题外话,更适合codereview.stackexchange.com,因为没有真正要回答的直接问题。也就是说,异步演示的通常过程是发出最后输出的语句作为第一条语句以明确这一点。
-
有直接的问题要回答吗?而且我相信因为这与编程有关,而我作为初学者试图了解正在发生的事情。这是有效的。我实际上可能做错了什么或不了解 shell 的实际工作原理。有人可以指出这个错误,或者让我知道答案是肯定的。我还不够先进,不知道答案是什么,这就是我转向这里的原因。
-
所以,尼尔,你不能对此采取行动吗?如果您认为我在节点 shell 中执行的代码由于它是异步的事实而打印出来,请告诉我?
标签: json node.js mongodb asynchronous synchronous