async.js:迭代一个集合,直到一个返回true

时间:2017-08-31 19:16:25

标签: javascript arrays async.js

我对async.js可以做的事情非常满意,但似乎缺少一件我现在需要做的事情:

我有一个包含数据的数组。

[{"name": "bob", "age":15},
 {"name": "bill", "age":19},
 {"name": "john", "age": 24}]

我想用 array [i] 作为参数调用相同的函数,直到它为数组的其中一个内容返回true。 (在这个例子中,可能会将用户写入数据库,直到其中一个人至少具有指定的年龄,否则返回错误)。 所以: 试试鲍勃 - >错误 然后试试账单 - >成功 - >然后继续下一个任务,然后继续

我发现的所有内容都需要一系列功能(而不是数据),或者似乎并不知道这个想法"尝试直到找到匹配"。

或许我没有读好docs? 我怎样才能做到这一点?感谢

1 个答案:

答案 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);