如何将.every与回调一起使用

问题描述 投票:0回答:1

让我们说一下我要检查的物品清单。如果一项无效,我想退出.every函数。查找定义可以在元素中的任何一个返回false时退出。但是当检查的函数使用回调时,如何实现这种行为?

resultList.every(function (item) {
  return doCheck(item)
});

doCheck(item){
  _checkDBforValidEntry(item, function (err) {
     if (err) {
       return false;
    }else{
       return true;
    }
 });
}

这是一个简单(也许不完整)的示例,但它演示了我的问题。这似乎不符合我的预期。陈述是否错误?这是一个根本不起作用的星座吗?如何解决此问题?

javascript node.js callback
1个回答
2
投票

Promisify doCheck,然后使用Promise.all,它会在一次迭代出现错误时立即抛出:

const doCheck = (item) => new Promise((resolve, reject) => {
  _checkDBforValidEntry(item, function (err) {
     if (err) {
       reject();
    }else{
       resolve();
    }
 });
};
Promise.all(resultList.map(doCheck))
  .then(() => {
    // Everything successful
  })
  .catch(() => {
    // At least one failure
  });
© www.soinside.com 2019 - 2024. All rights reserved.