如何实现承诺.所有解决在Javascript



我有这个代码来搜索用户是否在列表中。问题是,我需要并行实现对findOne的调用。我如何添加promise. allsettle ?

与代码一样,我如何创建对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. allsettle ?

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

我不知道如何尝试了…谢谢!

然后您想要传递一些要查找的名称给fetchData,并将这些名称映射到对findOne的调用。然后根据你从映射中得到的承诺调用Promise.allSettled。最后按您的意愿处理返回的固定数组:

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"]);

相关内容

  • 没有找到相关文章

最新更新