使用loopbackjs
。
在我的代码中,我需要以非常自定义的方式验证属性,因此我无法使用可用的验证器。
因此,我正在考虑像这样使用它:
var somevar = "someval";
var anothervar = "anothervar";
MyModel.createme = function(prop1, prop2, prop3, prop4, callback) {
async.parallel([
verify_prop1,
verify_prop2,
verify_prop3,
verify_prop4
], function(err, results) {
});
}
然后我打算为异步创建函数:
//local methods
var verify_prop1 = function(callback) {
};
这是我意识到自己陷入困境的地方。如果我在async.parallel调用中内联编写函数,我可以访问函数参数prop1等。但是如何将它们放入我的verify_propX函数中呢?异步pararell的函数签名是否已修复?我过分复杂了吗?
在另一个文件中,我在异步中使用了三个并行函数,它们非常大,所以它看起来不太好,编辑也变得昂贵。
所以我想要一个干净的异步方法分离......我怎么能这样做?
答案 0 :(得分:3)
async.parallel([
async.apply(verify_prop1, prop1),
async.apply(verify_prop2, prop2),
async.apply(verify_prop3, prop3),
async.apply(verify_prop4, prop4)
], function(err, results) {
答案 1 :(得分:2)
假设四个验证函数可以是相同的函数,只有一个不同的参数传递给它们,那么你可以通过从参数自动创建一个道具数组然后使用async.map()
迭代来干掉它。该数组并行:
var somevar = "someval";
var anothervar = "anothervar";
MyModel.createme = function(prop1, prop2, prop3, prop4, callback) {
async.map([].slice.call(arguments, 0, 4), function(item, done) {
// insert code here to verify the prop passed here as item
// call done(null, result) when the proccesing is done
done(null, result);
}, function(err, results) {
// array of data here in results
});
}
由于您并未真正指定需要传递给工作函数的内容,并且您的注释表明某些函数需要多个prop参数,因此您可以混合使用内联函数和外部函数调用。这使您可以将功能的内容放在外部函数中,但是您可以在内联函数中本地进行设置,您可以访问所有参数:
var somevar = "someval";
var anothervar = "anothervar";
MyModel.createme = function (prop1, prop2, prop3, prop4, callback) {
async.parallel([
function (done) {
verifyA(prop1, prop2, done);
},
function (done) {
verifyB(prop3, done);
},
function (done) {
verifyC(prop2, prop4, done);
}
], function (err, results) {
// everything done here
});
}
通过这种方式,您可以以任何方式构建并行操作,并为每个操作传递任意数量的参数。