我试图搜索可变数量的数组,当在任何数组中找到给定值时返回true。
我想知道如何解决这个问题,因为数组可能会非常大。 (我成功使用了Array.prototype.forEach,但因为它正在阻止'我想使用异步版本)
以下是我当前尝试的抽象。
var desired_value = 'example'
(function(callback) {
async.each(arry1, function(somevalue, callback) {
if(somevalue === desired_value) return callback(null, true);
});
async.each(arry2, function(somevalue, callback) {
if(somevalue === desired_value) return callback(null, true);
});
async.each(arry3, function(somevalue, callback) {
if(somevalue === desired_value) return callback(null, true);
});
})(function(err, result) {
return (!result || err) doThis() : doThat();
});
答案 0 :(得分:0)
阅读有关异步并行的说明:
注意:parallel是关于并行启动I / O任务,而不是关于 并行执行代码。如果您的任务不使用任何计时器或 执行任何I / O,它们实际上将被串行执行。任何 每个任务的同步设置部分将在一个之后发生 其他。 JavaScript仍然是单线程的。
https://github.com/caolan/async#paralleltasks-callback
编辑:至于错误,parallel
需要执行一系列函数。但是,您使用的结果async.each
并不会返回任何内容。
编辑:让其他人了解如何以非阻塞方式执行非IO代码:
function nonblockEach(arr, fn, iterations) {
if (iterations == undefined) iterations = 1000;
var count = 0;
return function(callback) {
var index = 0;
function exec() {
while (count < iterations && index < arr.length) {
var element = arr[index];
fn(element, index, arr);
index++;
count++;
}
if (index < arr.length) process.nextTick(exec);
else callback();
}
process.nextTick(exec);
}
}
var desired_value = 'example'
var found = false;
async.parallel([
nonblockEach(arry1, function(some_value) {
found = found || (some_value === desired_value);
}),
nonblockEach(arry2, function(some_value) {
found = found || (some_value === desired_value);
}),
nonblockEach(arry3, function(some_value) {
found = found || (some_value === desired_value);
})
], function(err) {
return (found) ? something() : anotherThing();
});
未经测试,但它为您提供了想法。