我有一个场景,我以下面的方式使用'async'库。
async.series([function (cb) {
dbWeb.saveOrderForm(chain.toString(), function (err, data) {
if (err) {
cb(err);
} else {
req.order_id = data;
cb();
}
});
}, function (cb) {
async.parallel([function (cbForm) {
async.eachSeries(formats, function (format, cbFormat) {
let resource = {
set: {
format_id: format,
order_id: req.order_id
}
};
let chain = sql.insert({ separator: '\n' }).into('order_format');
sqlify(chain, resource);
dbWeb.saveArray(chain.toString(), function (err) {
if (err) {
cbFormat(err);
} else {
cbFormat();
}
});
}, function (err) {
if (err) {
cbForm(err);
} else {
cbForm();
}
});
}, function (cbForm) {
async.eachSeries(designStyle, function (design, cbDesign) {
let resource = {
set: {
design_style_id: design,
order_id: req.order_id
}
};
let chain = sql.insert({ separator: '\n' }).into('order_design_style');
sqlify(chain, resource);
dbWeb.saveArray(chain.toString(), function (err) {
if (err) {
lme.e(err);
cbDesign(err);
} else {
cbDesign();
}
});
}, function (err) {
if (err) {
cbForm(err);
} else {
cbForm();
}
});
}, function (cbForm) {
async.eachSeries(fabrics, function (fabric, cbFabric){
let resource = {
set: {
fabric_id: fabric,
order_id: req.order_id
}
};
let chain = sql.insert({ separator: '\n' }).into('order_fabric');
sqlify(chain, resource);
dbWeb.saveArray(chain.toString(), function (err) {
if (err) {
cbFabric(err);
} else {
cbFabric();
}
});
}, function (err){
if (err) {
cbForm(err);
} else {
cbForm();
}
});
}, function (cbForm) {
async.eachSeries(locaion, function (loc, cbLoc){
let resource = {
set: {
location_id: loc,
order_id: req.order_id
}
};
let chain = sql.insert({ separator: '\n' }).into('order_location');
sqlify(chain, resource);
dbWeb.saveArray(chain.toString(), function (err) {
if (err) {
cbLoc(err);
} else {
cbLoc();
}
});
}, function (err){
if (err) {
lme.e(err);
cbForm(err);
} else {
cbForm();
}
});
}, function (cbForm) {
async.eachSeries(priceTypes, function (price, cbPrice){
let resource = {
set: {
order_pricing_sub_id: price,
order_id: req.order_id
}
};
let chain = sql.insert({ separator: '\n' }).into('order_price_types');
sqlify(chain, resource);
dbWeb.saveArray(chain.toString(), function (err) {
if (err) {
cbPrice(err);
} else {
cbPrice();
}
});
}, function (err){
if (err) {
cbForm(err);
} else {
cbForm();
}
});
}, function (cbForm) {
async.eachSeries(logos, function (logo, cbLogo){
let resource = {
set: {
logo_used_id: logo,
order_id: req.order_id
}
};
let chain = sql.insert({ separator: '\n' }).into('order_logo_used');
sqlify(chain, resource);
dbWeb.saveArray(chain.toString(), function (err) {
if (err) {
cbLogo(err);
} else {
cbLogo();
}
});
}, function (err){
if (err) {
cbForm(err);
} else {
cbForm();
}
});
}
], function (err) {
if (err) {
cb(err);
} else {
cb();
}
});
}
], function (err) {
if (err) {
res.status(500).json({
status: 'Something went wrong while trying to access data from database',
msg: err
});
} else {
res.status(200).send({
status: 'success'
});
}
});
这是整个代码,在第一个async.series函数中我必须保存'order'。然后我需要那个id来执行'function(cb)'中的所有函数,这些函数可以并行完成。但是在每个并行函数中,我都要做async.eachSeries。
这是当前的情况。代码感觉太乱了。抱歉给你带来不便。
如何使用pg-promise函数实现它?