nodejs / async:如何让我的代码容易理解

使用loopbackjs

Somwhere在我的代码中,我需要以非常自定义的方式validation属性,所以我不能使用可用的validation器。

因此,我正在考虑像这样使用它:

 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) { }); } 

那么我打算为async创build函数:

 //local methods var verify_prop1 = function(callback) { }; 

这是我意识到我被卡住的地方。 如果我在async.parallel调用中内联编写函数,我可以访问函数参数prop1等,但是如何将它们join到我的verify_propX函数中? asynchronouspararell的函数签名是固定的吗? 我过分复杂的东西?

在另一个文件中,我在asynchronous中使用了三个并行函数,它们相当大,所以看上去不太好,编辑也变得昂贵。

所以我想要一个干净的asynchronous方法分离…我怎么能做到这一点?

假设四个validation函数可以是相同的函数,只需传递给它们不同的参数,那么您可以通过从参数自动创build一个道具数组,然后使用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参数,你可以使用内联函数调用和外部函数调用的混合。 这可以让你把function的肉放在外部函数中,但是你可以用一个内联函数在本地进行设置,你可以访问所有的参数:

 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 }); } 

以这种方式完成,你可以任何你想要的方式来构造你的并行操作,并将任意数量的parameter passing给每一个。

 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) {