我有这个代码来搜索用户是否在列表中。问题是,我需要并行实现对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"]);