如何在 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"]);
我有这段代码可以搜索用户是否在列表中。问题是,我需要并行执行对 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"]);