我需要处理两个单独的数组。由于它们不依赖于代码,我想异步地执行此操作。
这是我的代码:
cats = ['snowball', 'berlioz', 'garfield', 'lucifer'];
tigers = ['shere khan', 'hobbes', 'rajah'];
async.parallel({
cats: async.apply(cats.forEach(function(item){
if(item == 'garfield')
console.log('hide your lasagna');
else
console.log('all safe');
})),
tigers: async.apply(tigers.map(function(item){
if(item == 'hobbes')
return 'eats tuna';
else
return 'eats people';
}))
}, function(error, results){
if(error)
console.log(error); return;
meals = JSON.parse(results['tigers']);
console.log('tiger meals: '+meals);
});
这是我得到的错误:
TypeError: Cannot call method 'apply' of undefined
出了什么问题?
另外,作为一个附带问题,如何在此处实施async.forEach
和async.map
?
答案 0 :(得分:2)
您的代码段中存在几个主要问题。
一步一步开始:
编写一个命名函数,在单个参数
上以异步样式执行您想要的操作function shouldWeHideTheLasagna(item, callback) {
if (item === 'garfield') {
process.nextTick(function () {
callback(null, true);
});
} else {
process.nextTick(function () {
callback(null, false);
});
}
}
了解如何在没有异步的情况下直接使用它。然后练习将其与async.map一起使用,async.map(cats, shouldWeHideTheLasagna, function (error, results) {});
然后为老虎重复一次,希望现在有足够的灯泡,你将准备尝试async.parallel与sub-asyncs的组合。但这是一个棘手的事情,所以一步一步地慢慢去理解每个步骤的工作原理。
答案 1 :(得分:0)
我认为你误解了async的用途。 Async旨在用于已经异步的函数,并为回调提供组织。例如,如果您需要按顺序调用三个IO事件,则可以使用Async.series确保每个事件都在之前运行,而不必担心callback hell
在您的场景中,您的所有函数都是同步的,因此,async实际上不会改善您的运行时。我建议使用核心数组原型,如Array.map和Array.forEach。