我一直在尝试编写一些将行写入数据库的代码。它:
采用offer
对象(依赖)
通过回调(依赖)从商品对象中读取items
数组
迭代每个项目
从offer
和item
对象中获取一些值
从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循环而感到困惑。
答案 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);
});
});
}