javascript - 循环数组并检查循环中的 MongoDB 集合(异步)

标签 javascript node.js mongodb asynchronous

我在调用 mongodb 时遇到了一些异步循环的问题。我尝试了几种方法并研究了 async 和 co-monk 等库。 (我使用 monk 作为我的连接等)。

我有一组数据需要传递给 mongo 集合以检查其是否正常等。我的背景是 PHP/Sql,所以我有点难以理解 mongo 的异步特性。

我正在尝试做的一些基本 sudo 代码:

function check (collection) {
    var records = { { body: "Test 1"}, { body: "Test 2" } };
    for (var i in records) {
        collection.find({ body: records[i].body }, {}, function (e, rows) {
            console.log(rows);
        });
    }
}

它只在记录的最后一个循环上执行。我知道这是由于 JS 的异步性质造成的,但我该如何正确构建它才能像这样工作?

谢谢,

最佳答案

异步处理的一般关键是您希望在继续下一次迭代之前获得当前迭代何时完成的一些指示。由于诸如 .find() 之类的实际操作本身采用了“回调”,当操作完成并带有响应时“回调”被“调用”,那么您通常想要做的是调用一些表示您在同一段代码中的迭代结束。

基本上,您可以获得与使用 "async.eachSeries" 的传统循环中类似的结果。方法,它只会让“一次迭代”发生:

function check (collection) {
    var records = [ { body: "Test 1"}, { body: "Test 2" } ];
    async.eachSeries(records,function(item,callback) {
        collection.find( item, function (err, rows) {
            console.log(rows);
            callback(err)
        });
    },function(err) {
        if (err) throw err;
        console.log("done");
    });
}

所以这里的每个数组参数都作为“item”参数传入“iterator”函数,第二个参数是后面要用到的“回调”函数。每次调用迭代器时,该参数都会传递给 .find() 方法,该方法又具有自己的“回调”,其中给出“错误”或“文档”响应。

在该回调中,由“迭代器”函数提供的“回调”随后被调用以指示当前迭代的完成。这允许此处的“每个”函数继续并确实调用下一个“迭代”并处理下一个数组元素。

注意您的背景,注意在 JavaScript 中使用 [] 括号标记“数组”的正确方法,如图所示。这通常是使用数组时的一个重要区别。

"async.each" 还有其他变体和 "async.eachLimit"这两者都允许一定程度的并行处理,但“系列”方法以您习惯于使用传统循环的方式“按顺序”执行操作。

因此,在循环操作是“非阻塞”的情况下,您需要在循环完成之前发出信号,然后才能继续。

关于javascript - 循环数组并检查循环中的 MongoDB 集合(异步),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26176957/

相关文章:

asp.net - 从 Asp.Net 的代码隐藏控制 Lightbox(模态)

JavaScript 数字 MIN_VALUE 是如何工作的?

javascript - ios 4.2 uiwebview javascript window.print 不打印,不在事件前后启动

javascript - 使用 React 和 Express 阻止跨域请求

node.js - CoffeeScript 主要?

node.js - 模拟文件系统内容不适用于 gulp.src

node.js - 风 sails JS : Best way to seed initial users

mongodb - Mongo DB 集合紧凑

javascript - Mongodb 将变量设置为 find().toarray()

javascript - Mongoose 模型的数字类型错误?