Node.js for循环并行数组处理,只有一个回调
node.js for loop parallel array processing with only one callback
我想用一个模式数组和一个对象来创建一个for循环,以检查该对象是否与一个模式匹配。模式数组应并行处理,如果其中一个模式与对象匹配,则应调用onMatch()回调函数并取消其他操作,否则应调用onNoMatch()函数。
目前看起来是这样的。我不知道在哪里放onNoMatch()-函数,有时有多个回调:
module.exports = function matchingPattern(patterns, object, onMatch, onNoMatch) {
for (key in patterns) {
if(patterns[key].param1 != object.param1) continue;
else if(patterns[key].param2 != object.param2) continue;
else if(patterns[key].param3 != object.param3) continue;
else {
onMatch(patterns[key].id);
}
}
}
//编辑工作解决方案
var arr = [1,2,3,4,5]
var async = require('async');
function matchPattern(pat, object, cb){
console.log(pat +' % '+ object);
if(pat % object == 0) cb(pat);
else cb();
}
function matchingPattern(patterns, object, onMatch, onNoMatch) {
async.each(patterns, function(pat, callback){
matchPattern(pat, object, function(match){
return callback(match);
});
}, function (res){
if(res) return onMatch(res);
return onNoMatch()
});
}
matchingPattern(arr, {2=2matches, 6=no matches}, function onMath(a){
console.log('onMatch('+a+')');
}, function onNoMatch(){
console.log('onNoMatch()');
});
我个人更喜欢使用async库,因为使用async可以很容易地处理这些工作流。
var FOUND = {
code: 'Custom'
item: null,
pattern: null
};
function matchingPattern(patterns, object, onMatch, onNoMatch) {
async.each(patterns, function(pattern, callback){
// check pattern as per your business logic.
// assuming matchPattern is async
matchPattern(pattern, object, function(match){
if(match){
FOUND.item = object;
FOUND.pattern = pattern;
return callback(FOUND);
}else{
return callback();
}
});
},
function (error, result){
if(error){
if(error.code == 'Custom'){
// its not an error. We have used it as an error only.
return onMatch();
}else{
// handle error here.
}
}
// all items done and we have not found any pattern matching.
return onNoMatch();
});// end of async.each();
}// end of matchingPattern()
相关文章:
- 与 promise 一起使用时,异步瀑布不执行下一个回调方法
- Angular,设置一个回调函数,用于在工厂和控制器之间更新
- 使用 CoffeeScript 的类和 jquery.transit 创建一个回调循环
- 如何通过一个回调异步排队和执行多个promise
- 带有一个回调的多个循环ajax请求
- jQuery中的多个同时Ajax请求(带有一个回调)
- 如何将回调方法发送到另一个回调方法
- Meteor.js HTTP.get 获取 JSON 引号并解析结果似乎包含一个回调函数
- j查询多个回调到一个回调计数调用
- 一个回调两个异步函数,一个是谷歌 api getDistanceMatrix
- 关闭离子侧菜单时是否有任何回调
- 我想要一些在另一个回调函数内部的结果
- 回调被多次调用,但我只想要最后一个回调
- Ember 是否有总是回调.js .then 函数
- 将值从一个回调传递到另一个回调
- Javascript从另一个回调访问对象变量,而不将变量放在全局范围内
- FileReader:读取多个项目;如何在读取最后一个回调时设置回调
- JavaScript是否承诺.都有一个回调,当有成功和失败时触发
- 我应该有一个回调吗?
- 同构SmartClient是否有一个回调,当用户选择表单文本项上的选择列表记录时触发