forEach loop nodejs

时间:2015-09-02 05:26:17

标签: database node.js asynchronous io

我一直在尝试编写一些将行写入数据库的代码。它:

  • 采用offer对象(依赖)

  • 通过回调(依赖)从商品对象中读取items数组

  • 迭代每个项目

  • offeritem对象中获取一些值

  • 从db读取一些统计数据以确定项目的值

  • 将两行的字段写入数组

  • 将数组推送到数组数组

  • 使用此数组将行插入db

function WriteToDB(object) {
  object.getItems(function (err, items) {
  var rowlist = [];
  items.forEach(function (item) {
    var field1 = offer.name;
    var field2 = item.name;
    var field3 = getItemValue(item.name); //async db call
    var row = [field1, field2, field3];
    rowlist.push(row);
  });

  write(valuelist);
}

我知道这不会工作,但我似乎无法 grok nodejs足以弄清楚如何在其他语言中解决这个简单的待完成任务。我在学习async.waterfall时搞砸了,但是因为在同样非常异步的东西中混合了一个同步的foreach循环而感到困惑。

2 个答案:

答案 0 :(得分:1)

您可以使用async模块,例如:

iOS 8.3

答案 1 :(得分:0)

您可以使用我刚刚创建的名为utils-pkg的库,它具有一个名为.each()的函数,可以迭代对象或数组中的每个元素。它不是同步的,但在回调时,您可以在询问时继续下一次迭代

此函数还有另一个回调参数,该参数在完成所有迭代后执行

检查包here

var utils = require("utils-pkg");

function WriteToDB(object) {
    object.getItems(function (err, items) {
        var rowlist = [];

        utils.each(items, function(index, value, next){
            var field1 = offer.name;
            var field2 = value.name;
            var field3 = getItemValue(value.name); //async db call
            var row = [field1, field2, field3];

            rowlist.push(row);
            next();  // call this once you are done with this iteration
        }, function(){
            // This is called when all iterations are done
            write(valuelist);
        });
    });
}