如何在 Javascript 中实施 promise.allSettled

how to implement promise.allSettled in Javascript

我有这段代码可以搜索用户是否在列表中。问题是,我需要并行执行对 findOne 的调用。如何添加 promise.allSettled?

如代码所示,如​​何创建对 findOne 的多次调用?我已经查看了 Promises 的文档,但我不知道在这种情况下如何实现它。

const findOne = (list, { key, value }) => {  
    return new Promise ((resolve, reject) => {  
        const element = list.find(element => element[key] === value); 
        
        setTimeout(() => {  
            element 
            ? resolve(element.name) 
            :reject(new Error('ERROR: Element not found')); 
        }, 2000); 
    });
  }
  
  const users = [  
  {
    name: 'Carlos', 
    rol: 'Teacher' 
  },
  {
    name: 'Ana', 
    rol: 'Boss' 
  }
  ];


console.log('findOne User'); 

async function fetchData(){ 
  try { 
    const findUser = await findOne(users,{key: 'name', value: 'Carlos'}); 
    console.log("user:" + findUser); 
  }catch(err){ 
    console.log(err.message); 
  }
    
}

fetchData(); 

我有这段代码可以搜索用户是否在列表中。问题是,我需要并行执行对 findOne 的调用。如何添加 promise.allSettled?

如代码所示,如​​何创建对 findOne 的多次调用?我已经查看了 Promises 的文档,但我不知道在这种情况下如何实现它。

我不知道怎么试了...谢谢!

然后您可能希望将要查找的一些名称传递给 fetchData,并将这些名称映射到对 findOne 的调用。然后根据您从该映射返回的承诺调用 Promise.allSettled。最后把返回的settled-array按照自己的意愿进行处理:

const findOne = (list, { key, value }) => new Promise ((resolve, reject) => {  
    const element = list.find(element => element[key] === value); 
    setTimeout(() => element ? resolve(element.name) 
                             : reject(new Error('ERROR: Element not found'))
    , 2000); 
});
  
const users = [{name: 'Carlos', rol: 'Teacher'}, {name: 'Ana',  rol: 'Boss'}];

console.log('findOne User'); 

async function fetchData(names) {
  const promises = names.map(value => findOne(users, {key: 'name', value }));
  let results = await Promise.allSettled(promises);
  console.log(results);
}

fetchData(["Carlos", "Helen", "Ana"]);