我对async.js可以做的事情非常满意,但似乎缺少一件我现在需要做的事情:
我有一个包含数据的数组。
[{"name": "bob", "age":15},
{"name": "bill", "age":19},
{"name": "john", "age": 24}]
我想用 array [i] 作为参数调用相同的函数,直到它为数组的其中一个内容返回true。 (在这个例子中,可能会将用户写入数据库,直到其中一个人至少具有指定的年龄,否则返回错误)。 所以: 试试鲍勃 - >错误 然后试试账单 - >成功 - >然后继续下一个任务,然后继续
我发现的所有内容都需要一系列功能(而不是数据),或者似乎并不知道这个想法"尝试直到找到匹配"。
或许我没有读好docs? 我怎样才能做到这一点?感谢
答案 0 :(得分:1)
使用普通的js很容易。只需在promise中包含递归迭代:
var some = new Promise( res => {
const arr = [{"name": "bob", "age":15}, {"name": "bill", "age":19},{"name": "john", "age": 24}];
(function next(i){
if(i>=arr.length) return res(false);
someasync(arr[i]).then(result => {
if(result){
res(true);
}else{
next(i+1);
}
});
})(0);
});
ESnext中的相同内容:
async function some( func, params ){
for(var i = 0; i < params.length; i++){
if( await func(params[i]) ){
return true;
}
}
return false;
}
some(a=>a%2==0, [0,1,2,3,4]).then(alert);